java控制线程(一)

Qt 文件对话框(QFileDialog)实战指南 —— 从基础到高级应用 本文是Qt文件对话框(QFileDialog)的实战指南,从基础静态函数调用到高级对象模式应用,全面解析了文件选择、保存、目录选取及多选等核心功能。文章深入探讨了MIME类型过滤、自定义侧边栏、信号槽实时响应及状态持久化等高级技巧,并提供了跨平台开发中的避坑指南与最佳实践,帮助开发者高效、稳健地集成文件操作功能。 阅读详情

java控制线程(一)

            控制线程-join方法

java的线程支持提供了一些便捷的工具方法:

join线程:Thread提供了让一个线程等待另一个线程完成的方法-join()方法。
当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完
为止。

join()方法通常由使用线程的程序调用,以将大问题划分成许多小文题,每个小问题分配一个线程。当所有的小问题
都得到处理后,再调用主线程来进一步操作。

示例代码:

public class JoinThread extends Thread {
    //提供一个有参数的构造器,用于设置该线程的名字
    public JoinThread(String name)
    {
        super(name);
    }
    //重写run()方法,定义线程执行体

    @Override
    public void run() {
        for (int i=0;i<100;i++)
        {
            System.out.println(getName()+" "+i);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //启动子线程
        new JoinThread("新线程").start();
        for (int i=0;i<100;i++)
        {
            if (i==20)
            {
                JoinThread jt=new JoinThread("被join的线程");
                jt.start();
                //main线程调用了jt线程的join方法,main方法
                //必须等jt执行结束才会向下执行
                jt.join();
            }
            System.out.println(Thread.currentThread().getName()+"---"+i);
        }
    }
}

上面程序中一共有三个线程,主方法开始时就启动了名为“新线程”的子线程,该子线程将会和main线程并发执行。
当主线程的循环变量i等于20时,启动了名为“被join的线程”的线程,该线程不会和main线程并发执行,main线程必须
等该线程执行结束后才可以向下执行。在名为"被Join的线程"的线程执行时,实际上只有2个子线程并发执行
而主线程处于等待状态。结果如下

在这里插入图片描述

主线程执行到i==20时启动,并join了名为“被join的线程”的线程,所以主线程将一直处于阻塞状态,直到名为
“被join的线程”的线程执行完成。

join()方法有如下3种重载方式。

1、join():等待被join的线程执行完成。

如上

2、join(long millis) :等待被join的线程的时间最长为millis毫秒。如果在millis毫秒内被join的线程还没有执行
结束,则不再等待。

将上面的代码做如下修改

if (i==20)
            {
                JoinThread jt=new JoinThread("被join的线程");
                jt.start();
                //main线程调用了jt线程的join方法,main方法
                //必须等jt执行结束才会向下执行
                jt.join(9);
            }

结果如下:

在这里插入图片描述

3、join(long millis,int nanos):
等待被join的线程的时间最长为mills毫秒加nanos毫微秒。

!第三个很少用,单位太小软件和硬件都无法精确。

java中的源代码如下

源代码:

public final void join() throws InterruptedException {
        join(0);
    }
public final synchronized void join(long millis, int nanos)
    throws InterruptedException {

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
            millis++;
        }

        join(millis);
    }

最后实现核心都是下面这个:

public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }
树莓派3-改装wifi外置天线 声明:本文只是技术性探讨,改装引起的产品损坏等后果,由用户自负! 改装主要有两种方法 方法一:直接替换原来的天线 1、移除原有的小陶瓷天线,就在Made in PRC(或UK)那边的那个 清理一下阻焊剂方便天线接地(图中PRC左侧) 2、焊接天线 天线的屏蔽层焊接到清理完阻焊剂的地方,中间的信号线焊接到PRC右侧焊盘。 3、最终的样子 阅读详情

相关推荐

多节阶梯阻抗变换器工程设计的公式推导

  多节阶梯阻抗变换器工程设计的公式推导,仔细看此文,有点烧脑,所以碎片十分钟,收获一丢丢。   现在就来设计一个超宽带多节阶梯阻抗变换器,要求带内纹波符合切比雪夫分布。   其实,此文已经是省去了大量中间公式推导,只剩下精炼内容了。   阶梯阻抗变换器指标需求   假设现在有一项目需求分析结果是:做一个微带线超宽带阶梯阻抗变换器,指标如下:   从50欧变换到100欧;   回波损耗22dB;   功率容量:2W;   频率范围2~18GHz;   插损能做多少就多少,用30mil板厚.

wusuowei1010的博客 7806

Java中的线程控制方法_在Java中使用工具方法控制线程的执行

Java提供了一些便捷的工具方法,通过这些工具方法可以控制线程的执行join()方法Thread提供了一个能够让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流A中调用其他线程B的join()方法时,A线程将被阻塞,知道B线程执行完成为止。join()方法通常由使用线程的程序来调用,用以将大问题划分成多个小问题,每个小问题分配一个线程。当小问题都得到处理之后,再调用主线程来...

weixin_36217058的博客 201

CMap与L1000技术解析:基因表达数据在药物发现中的应用

本文深入解析了CMap(连接图)与L1000技术在药物发现中的核心应用。CMap通过构建基因表达“关系网”,实现基于模式匹配的药物重定位;L1000技术则以低成本、高通量方式生成关键基因表达数据,支撑了LINCS超级数据库。文章以CLUE平台为例,手把手演示了如何利用疾病基因表达签名逆向筛选潜在治疗化合物,并拓展了其在解析药物机制、预测副作用等多场景下的价值。

weixin_29207533的博客 728

java主线程控制另外一个线程_在另一个线程中抛出的异常会使主线程崩溃吗?...

每个线程都有一个选项来设置未捕获的处理程序当线程遇到异常将被称为fron Android的文档覆盖here:无效是,setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler EH): 设置的默认处理,由于未捕获到异常时调用线程而突然终止,并且没有其他处理程序已为该线程定义。未捕获的异常处理首先由线程控制,然后由线程的Thr...

weixin_39615643的博客 429

国密USB Key开发实战:SKF库调用全流程解析(附代码示例)

本文详细解析了国密USB Key开发中SKF库的调用全流程,涵盖从设备枚举、应用容器遍历到数字签名与验证的核心步骤。通过实战代码示例,深入探讨了SKF库的层次化模型、SM2签名实现细节以及纯软件验签方案,为开发电子签章、安全登录等合规应用提供了一套完整的调用开发指南。

oo7890的博客 524

Zephyr RTOS -- 学习笔记总述

文章目录摘要1. 开发基础部分2. 内核服务入门 本笔记基于 Zephyr 版本 2.6.0-rc2 摘要 1. 开发基础部分 2. 内核服务入门 2.1 线程简介 2.2 线程 2.3 工作队列线程 2.4 调度 2.5 中断 2.6 轮询 API 2.7 信号量

思想给了我们太多的自由,而我们拖累了思想...... 4824

Java多线程管理

文章目录1,线程状态2,线程状态切换经典生产者消费者问题:3,多线程死锁4,守护(后台)线程 1,线程状态 NEW 刚创建(new) RUNNABLE 就绪态(start):调用一个线程的start方法,那么这个线程就进入了就绪态 RUNNING 运行中(run):等待的线程被CPU调度后就进入Running状态 BLOCK 阻塞(sleep):由于某一个条件没有满足,暂时不需要CPU TERMINATED 结束 2,线程状态切换 线程的阻塞和唤醒 sleep:线程自我休眠,时间一到自己就会醒来

antique的学习笔记 1191

数学:箭头符号→(to)都表示什么意义?

数学符号“→”在不同领域有不同含义:在逻辑中表示“蕴含”(p→q);在函数中表示映射关系(f:A→B);在极限中表示变量趋近(x→a);在推导过程中表示推理方向(A→B)。此外,它也可能用于向量表示或数列趋势。其具体含义需结合上下文判断,核心应用场景包括逻辑运算、函数定义、极限分析和数学推导等。

shunzi2016的博客 5564

什么是线程,如何在Java中创建和管理线程?

一听到线程,你可能会想:“线程,我为什么要关心这个?我可以专注于我的代码和数据。” 但事实是,线程是构建并发应用程序的关键部分。所以,让我们一起探索一下线程是什么,以及如何在Java中创建和管理它们。首先,我们来谈谈线程的基本概念。线程是一个微小的“单元”,它可以在同一时间执行多个任务。想象一下,如果你有两个线程,一个在厨房煮饭,另一个在客厅打扫,那么这两个线程就可以同时进行,而不会相互干扰。这就是线程的魔力所在。那么,如何在Java中创建和管理线程呢?

scjrw的博客 543

python基础之语言发展历史

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。 目录一、前言二、发展历史1、Python是一种面向对象的解释型编程语言2、Python常被称为胶水语言3、Python由Guido开发4、Python连续多年入选编程语言TOP105、Python的发展历史三、总结 一、前言   由于Python语言的简洁性、易读性以及可扩展性,它在网络爬虫、数据分析、.

jiankang66的博客 3348

RH850系列芯片深度剖析 1.5-链接(ld)文件解析

基础编译过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。CONSTANTS接下来的内存空间定义部分会使用这些常量来定义内存空间的范围,理论上来说不定义常量也没有影响,直接用魔鬼数字代替,定义常量的主要目的就是方便理解以及方便修改;从示例中可以看出,常量的值可以为16进制或者10十进制,而且10进制支持数量级单位(k级,M级);

本博客专注于嵌入式软件领域技术分享。 1427

LeetCode(多线程)- 1115. 交替打印 FooBar

题目链接:点击打开链接 题目大意:略。 解题思路:略。 相关企业 阿里巴巴 亚马逊(Amazon) AC 代码 // 手太阴肺经 BLOCKING Queue public class FooBar { private int n; private BlockingQueue<Integer> bar = new LinkedBlockingQueue<>(1); private BlockingQueue<Integer&

508

Oracle EBS和华为MetaERP在会计科目(COA)设计上的观察非常精准。这两种设计确实代表了两种截然不同的系统架构思想,我们可以从设计哲学、优劣对比和演进关系三个方面进行深入分析。

OracleEBS与华为MetaERP的COA设计对比分析 OracleEBS采用弹性域架构,通过固定段数字符串实现多维度核算,强调稳定性和全球统一标准,但修改成本高、扩展性受限。华为MetaERP采用解耦架构,将核算单元、自然科目和核算维度分离,支持动态扩展和灵活调整,更适合业务快速变化的企业。 OracleEBS优势在于强一致性和成熟稳定,劣势是灵活性差;华为MetaERP优势是极致灵活性,劣势是对管理要求高。两者代表了不同时代的企业软件设计理念:OracleEBS适合标准化需求,MetaERP则面向快

金牌架构师 429

JAVA控制线程执行顺序的方法(一)

使用wait(),notify()方法: public class ControlOrder { static Object lock=new Object(); static boolean ist2Runned ; public static void main(String[] args) { Thread t1 = new Thread() { @Override public void run() {

zikai_liang的博客 151

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

实现交替控制线程

1.实现如下结果12A34B56C78D910E1112F1314G1516H1718I1920J2122K2324L2526M2728N2930O3132P3334Q3536R3738S3940T4142U4344V4546W4748X4950Y5152Z import java.util.concurrent.locks.Condition; import java.util.concur...

haogexiaole的博客 221

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【线程】,java多线程常见面试题

(1)调用start方法就会创建一个PCB (2)在使用一个链表把PCB连接起来,而当再一次start的时候会创建一个一样的PCB这时候就加不到链表当中去了 *d).run方法属于自定义的类,而start属于Thread类 2.如何区分run方法和start方法 2.1打印线程的名称 2.2我们可以借助jconsole工具来查看在调用run方法和start方法的时候有没有创建新新线程,在这里就不演示了,感兴趣的可以下来看看 注意:当有两个线程的时候,如果t1的start在前,t2的start在..

m0_54852680的博客 89

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 线程通信

当线程在系统内运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,但 Java 也提供了一些机制来保证线程协调运行。 传统的线程通信 假设现在系统中有两个线程,这两个线程分别代表存款者和取钱者——现在假设系统有一种特殊的要求,系统要求存款者和取钱者不断地重复存款、取钱的动作,而且要求每当存款者将钱存入指定账户后,取钱者就立即取出该笔钱。不允许存款者连续两次存钱,也不允...

weixin_30343157的博客 124

JAVA八股与代码实践----使用三个线程交叉打印ABC 10次

这里介绍三种方法。

weixin_48968553的博客 313

java程序中,如何安全的结束一个正在运行的线程?interrupt()

java程序中,如何安全的结束一个正在运行的线程? 2013年02月27日 ⁄ 综合 ⁄ 共 2321字 ⁄ 字号 小 中 大 ⁄ 评论关闭 如何停止java的线程一直是一个开发多线程程序常遇到的一个问题。在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and

cs 681

Java 中如何终止一个正在运行的线程

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 1111

Java线程超时控制的实现

一.何时需要超时控制   超时控制一般使用阻塞时间比较长的操作上,有可能是和远程数据库的连接,也有可能是网络下载,在程序超时后, 往往需要进行一些操作,比如退出线程,或者重新执行.   二.实现方法   方法1   实现描述:使用一个守护线程作为计时器,并且在计时结束时抛出一个未检测异常。   具体实现:   类1:守护线程类 Java代码

zengsky的专栏 2093

wait()方法写在while循环中可以在线程接到通知后再一次判断条件

wait()方法写在while循环中可以在线程接到通知后再一次判断条件 synchronized public String pop() { String returnValue = ""; try { while(list.size()==0) { System.out.println("pop操作中的:"...

weixin_34054931的博客 496

java有几种运行方式_Java 多线程有序执行的几种方法总结

Java 多线程有序执行的几种方法总结同事无意间提出了这个问题,亲自实践了两种方法。当然肯定还会有更多更好的方法。方法一import java.util.concurrent.atomic.AtomicInteger;public class OrderedThread1 {static AtomicInteger count = new AtomicInteger(0);public stati...

weixin_42513814的博客 235

java workqueue_Java线程池中BlockingQueue的作用

关于线程池中BlockingQueue的疑问对于Java线程池,相信大家都或多或少使用过。关于其用法和原理介绍,网上已经有很多非常精彩的文章,珠玉在前,我就不献丑了。不了解的,可以参考这篇文章。今天我想讲的,是关于我对Java线程次的两个疑问,当然高手可以略过了。1.为什么线程池要使用BlockingQueue,而不是ArrayList或别的什么列表?2.既然使用了BlockingQueue,为什...

weixin_30646295的博客 761

java 线程类 通信_JAVA多线程间通讯常用实现方法解析

如何实现线程间通讯,有如下三种方法:1、使用Semaphore (信号量)类来控制线程的等待和释放功能:三个线程 a 、b 、c 并发运行,b,c 需要 a 线程的数据怎么实现分析:考虑到多线程的不确定性, 因此我们不能确保 ThreadA 就一定先于 ThreadB 和 ThreadC 前执行,就算 ThreadA先执行了, 我们也无法保证 ThreadA 什么时候才能将变量 num 给初始化完...

weixin_29435115的博客 184

Java——线程通信

Java——线程通信 线程通信中的三个方法: wait()   将当前进程挂起,释放CPU,进入等待队列notify()   将线程等待队列中优先级最高的线程唤醒notifyAll()  将等待队列中的所有线程唤醒 注°只能在同步代码块或者同步方法中使用 1、使用线程通信使得两个账户交替存钱 package com.kexin.study2; public

小黄鸭的博客 422
上一篇: java网络编程(一)
下一篇: java控制线程(二)
Round_Yuan
博客等级 码龄10年 26粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值