线程学习4:join方法的使用

C#中的线程同步----Join方法的使用实例 最近需要解决一个多线程问题,将这个问题抽象说来就是这个情况。 有A B两个方法同时完成F工作,A B操作均比较耗时,且 B操作需要A操作完成后才能执行。 现 要 A 和B同时运行n个线程。 用数学化的语言描述一下 /*************************** 阅读详情
package com.research;

/**
 * join方法
 * 原理:
 * 从源码中可以看到:join方法的原理就是调用相应线程的wait方法进行等待操作的,
 * 例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,
 * 当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,
 * 从而达到同步的目的
 */
public class JoinTest {

    public static void main(String[] args) throws Exception {

        ThreadJoinTest2 t = new ThreadJoinTest2("测试");
        t.start();

        ThreadJoinTest t1 = new ThreadJoinTest("小明");
        ThreadJoinTest t2 = new ThreadJoinTest("小东");
        t1.start();
        /**join的意思是使得放弃当前线程的执行,并返回对应的线程,例如下面代码的意思就是:
         程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕
         所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会
         */
        t1.join();

        /**join方法可以传递参数,join(10)表示main线程会等待t1线程10毫秒,10毫秒过去后,
         * main线程和t1线程之间执行顺序由串行执行变为普通的并行执行
         *
         * 程序执行前面10毫秒内打印的都是小明线程,10毫秒后,小明和小东程序交替打印。
         */
         //t1.join(10);


        t2.start();

    }
}

class ThreadJoinTest extends Thread {
    public ThreadJoinTest(String name) {
        super(name);
    }

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


class ThreadJoinTest2 extends Thread {
    public ThreadJoinTest2(String name) {
        super(name);
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            synchronized (this) {
                //测试notifyAll不会唤醒其他线程
                wait(10000);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(this.getName()+"-------------------------------------------");
    }
}

 

告别信号干扰!用Altium Designer 19搞定4层/6层PCB叠层设计的保姆级流程 本文详细介绍了如何使用Altium Designer 19进行4层/6层PCB叠层设计,解决信号干扰问题。通过实际案例和系统方法论,涵盖高速数字电路、混合信号系统等典型场景的设计优化,帮助硬件工程师和学生掌握电磁兼容(EMC)与信号完整性(SI)的核心技术。 阅读详情

相关推荐

用COMSOL计算复合材料板频散曲线:从建模到绘图全流程

导波在板结构中传播时,不同频率成分的速度不同,即频散现象。理解频散曲线是识别导波模态、确定相速度与群速度的基础,也是无损检测和结构健康监测中信号解读的关键。对于碳纤维增强复合材料等各向异性板,频散关系更加复杂,传统解析方法难以求解,数值仿真成为主流手段。通过COMSOL结合周期性边界条件与特征频率扫描,可以高效计算出复合材料板的频散曲线,进而绘制相速度和群速度随频率变化的图谱,为实验模态识别、换能器激励频率选择提供依据。本文以一个2毫米单向碳纤维板为例,详细介绍几何建模、材料参数设置、网格收敛验证、参数扫描

weixin_31412781的博客 233

Java多线程学习笔记(4)— “Thread类三个方法:线程休眠sleep()、线程礼让yield()、线程强制执行join()”

一、线程休眠sleep() sleep() 每个对象都有一把锁,sleep方法不会释放锁 sleep()方法的参数为需要睡眠的时间,单位:毫秒 sleep方法存在异常InterruptedException sleep在到达时间后线程进入就绪状态 sleep可以模拟网络延时,倒计时等 二、线程礼让yield() yield() 礼让线程,让当前正在执行的线程暂停,但不阻塞 直接让线程从运行状态转为就绪状态 让CPU重新调度,礼让不一定成功,看CPU心情 package book_practice;

一切因为是码农 346

基于PID算法的循迹小车

这一期为创客们带来基于PID算法的循迹小车制作 1.标准赛道示意图: (该赛道包含了:左直角、右直角、十字路口等路况) 2.灰度传感器安装示意图: (可根据实际情况调节各传感器之间的间距) 3.硬件原理图: 4.控制逻辑: 5.程序如下: #define leftA_PIN 7 #define leftB_PIN 6 #define left_Pwm_PIN 5 #define STBY...

qq_44343584的博客 4万+

线程的join方法

join()方法的作用就是让主线程等待子线程执行结束之后再运行主线程。下面示例中t2 为主线程,需要等待子线程t1 执行完成再执行 使用场景,线程2依赖于线程1执行的返回结果 在线程2 中调用线程1的join方法,即把cpu资源让给线程1 public static void main(String[] args) throws Exception{ Thread t1 = new Thread(()->{ try { T.

xiaozhu0301的博客 1万+

缠中说禅交易指南

战胜市场,其实就是战胜自己的贪婪、恐惧、愚蠢,缠中说禅技术分析理论只是把市场拔光给各位看,而拔光一个人并不意味着就等于征服一个人,对于市场,其道理是一样的。不干,不可能征服市场。对于市场来说,干就是一切。技术分析的最终意义不是去预测市场要干什么,而是分析市场正在干什么,是一种当下的直观。在市场上所有的错误都是离开了这当下的直观,用想象、用情绪来代替。 市场是有规律的,但市场的规律并不是显而易见的,是需要严格的分析才能得到。更重要的是,市场的规律是一种动态的,在不同级别合力作用下显示出来的规律,企图用些单纯的

baidu_25764509的博客 2万+

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

多线程中join( )方法的使用

你好,多线程join()方法了解一下~~先写一个子线程public class MyThread extends Thread{ public MyThread(String name){ super(name); } @Override public void run(){ for(int i=0;i&lt;=20;i++){ ...

张小烦的博客 1万+

土壤数据库辅助工具SPAW计算土壤导水率

首先点击打开根据之前的1比100土壤数据查表得到各个组分含量其中Field Capacity是田间持水量Matric Bulk Density是基质粒密度。

所有专家都曾始于新手 3443

多线程 | join方法

如果thread1在执行过程中被中断,它会捕获InterruptedException异常并打印相应的消息,同时再次设置中断标志。当一个线程调用另一个线程的join方法时,当前线程会进入等待状态,直到被调用的线程执行完毕。这使得开发者可以控制线程的执行顺序,确保某些关键线程在其他线程之前完成执行。因此,在使用join方法时,需要仔细考虑线程之间的依赖关系,避免死锁的发生。InterruptedException异常:当一个线程在等待另一个线程执行完毕时,如果被中断,会抛出异常,如下代码。

蘑菇蘑菇不会开花的专栏 3435

S7-1200PLC 2轴直线插补详细算法(完整源代码)

速度轴V90PN总线伺服梯形加减速速度控制(标准报文1应用)_v90伺服加减速时间怎么调整-优快云博客文章浏览阅读288次。

RXXW_Dor的博客 4256

【Unity】 预制体Prefab使用说明

在 Unity 中,Prefab 是一个可以预先制作并重复使用的 GameObject 或组件集合,Prefab 中的 GameObject 可以有子对象和其他组件。

灵境引路人 2849

多线程 join 方法

多线程 join 方法 1.前言 本节对 join 方法进行深入的剖析,主要内容点如下: 了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础; 了解 join 方法异常处理,我们在使用 join 方法是,需要对 join 方法进行有效的异常处理; 通过匿名内部类创建Thread 是我们本节代码示例所使用的的方式,对这种方式的掌握在后续工作中非常重要; 掌握 join 方法如何使用,这是本节的重点内容,也是本节的核心内容; 掌握带参数的 join 方法使用,在后续开发

Gonelin的博客 6597

Android12 适配 usb 触屏

在 Android 系统中,输入设备 IDC(Input Device Configuration)设备描述文件(.idc)是用于配置和定义输入设备行为和属性的文本文件。 该文件通常在`/system/usr/idc/` 或 `/vendor/usr/idc/`,具体位置因芯片厂商SDK而异。一般情况此类文件是预置到系统,开发者 root 权限才能修改这些文件。输入设备 IDC 设备描述文件在 Android 系统中起到了识别、配置、映射和定制输入设备的作用,使得系统能够准确解析和处理各种输入设备的事件,提

weixin_35723192的博客 1231

多线程(一) - Java线程(三) - join方法详解,join阻塞的到底是什么线程

理解join()方法之前请确保对wait()/notify()/notifyAll()机制已熟练掌握。 join()方法的作用是等待线程销毁。 join()方法反应的是一个很现实的问题,比如main线程的执行时间是1s,子线程的执行时间是10s,但是主线程依赖子线程执行完的结果,这时怎么办?可以像生产者/消费者模型一样,搞一个缓冲区,子线程执行完把数据放在缓冲区中,通知main线程,main线程去拿,这样就不会浪费main线程的时间了。另外一种方法,就是join()了。 例一:阻塞mian线程 public

weixin_39724194的博客 3512

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python 线程中join方法的使用

1、作用:让子线程插入主线程,直到子线程结束,可理解为在在join调用处把子线程的code move到了主线程,主线程接着下面的代码运行 2、触发条件:手动调用或主线程要退出时自动调用 3、example a) 主线程代码将要结束时自动调用        from threading import Thread import threading from time import sleep

天的优快云 1899

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

线程加入:join方法

join方法用于等待其他线程终止 如果线程A中调用了线程B的join方法,那么线程A阻塞,直到线程B执行完后,线程A从阻塞状态转为就绪状态,等待获取CPU的使用权。 join方法要在start方法调用后调用才有效,线程必须启动,再加入。 例子1: 让两个线程顺序打印1,2,3,即线程A打印123,线程A打印完后,线程B再打印 public class Main{ public static void main(String[] args) throws InterruptedException {

yinianxx的博客 453

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多线程join()方法使用

Thread类中有一个join()方法,此方法表示,在当前线程中a中,b线程调用join()方法,那么,a线程就会释放资源,让给b线程先执行。 举例1:主线程main让子线程先进行执行 package com.cvicse.thread.demo; public class ThreadDemo4 { public static void main(String[] args){ T...

yi_chen_的博客 983

05. Java多线程 join 方法

了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础;了解 join 方法异常处理,我们在使用 join 方法是,需要对 join 方法进行有效的异常处理;通过匿名内部类创建Thread 是我们本节代码示例所使用的的方式,对这种方式的掌握在后续工作中非常重要;掌握 join 方法如何使用,这是本节的重点内容,也是本节的核心内容;

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 1296

深入剖析Java线程的join()方法:从使用到原理的全方位解读

Java线程join()方法深度解析:从使用到原理。文章详细剖析了join方法的作用、实现原理及使用场景,重点解读了其基于wait/notify的同步机制,通过源码分析揭示循环检查的设计考量。同时对比了与其他同步方案的差异,提供了中断处理、超时控制等实践建议,帮助开发者正确使用这一基础而重要的线程协调工具。理解join方法对编写可靠的多线程程序具有重要意义。

weixin_51786043的博客 1288

线程方法join/join(timeout)源码分析

探究join/join(timeout)方法本质,做了些什么,如何唤醒线程

飞翔的鹿的博客 1064

线程间通信(二)—— 方法join的使用

  在很多情况下,主线程穿件并启动子线程,如果子线程中药进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join方法了。方法join的作用是等待线程对象销毁。创建项目joinTest1,类MyThread.java代码如下: 类Test.java代码如下: 运行结果如下所示: 方法sleep()中的值不能确定   方法join可以解决这个问题。创建项目joinTest2,类MyThread.j

qq_44307209的博客 753

join方法的使用

一、join方法 1.1 jon方法的作用 使所属的线程对象x正常执行run()方法中的任务,而使当前线程y无限期的阻塞,直到x线程销毁后再继续执行线程y后面的代码。 join方法具有使线程排队运行的作用,有些类似同步的运行的效果。 1.2 join与synchronized的区别 join在内部使用wait()方法进行等待,而synchronized关键字使用的是"对象监视器"原理作为同步。...

初心魏的博客 5173

线程基础:线程顺序执行join方法和Notify方法

2.线程A进入等待状态后此时会执行线程B,线程B打印完毕后调用notiyf()唤醒线程A,然后线程B调用wait方法释放锁,进入等待队列。如果有多个线程在等待同一个对象锁,那么只有一个线程会被唤醒,其他线程仍然会保持等待状态。1.首先线程A先拿到对象锁开始打印A,打印完毕后线程A调用wait()方法进入等待队列并释放锁。思路:A线程先打印A,B线程需要等待A线程执行完毕后再执行,C线程需要等待B线程打印完毕再执行.3.线程A在打印完后每次调用完wait()方法后,再调用notify()方法唤醒线程B;

愿你我都能实现自己的梦想 720

Java多线程技术二:线程间通信——join()方法的使用

在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束,这时如果主线程想等待子线程执行完成后再结束,例如子线程处理一个数据,主线程要取到这个数据中的值,这个时候要用到join()方法。join()方法的作用是等待线程对象销毁。

geminigoth的博客 904

线程的join方法详解

转:https://www.cnblogs.com/lyuweigh/p/9568697.html 首先 join有什么用? 他是用来确定线程何时结束的 , Thread提供了两种方法来确定线程何时结束,isAlive这里不做阐述,字面意思,字面用法 final void join() throws InterruptedExpetion Oracle官方教程上面关于join是这样说...

百雨的博客 415

python thread join方法_python线程join方法原理解析

这篇文章主要介绍了python线程join方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下几个事实1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样2 如果创建线程,并且设置了daemon为true,即thread.setDaemon(True), 则主线程执行完毕后自动...

weixin_39623750的博客 1541
上一篇: 线程学习3:ThreadGroup线程组
下一篇: POST请求https遇到unable to find valid certification path to requested target
JavaMrSun
博客等级 码龄9年 27粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值