关于线程join方法的理解
2019独角兽企业重金招聘Python工程师标准>>>
小弟 今天突发奇想,想着 把并行的线程 弄成串行的。。不关用什么方法吧。反正实现了。但用到了 一个不常用的方法join。左思右想 ,终于还是觉得有必要做一次记录。
首先 看下api:
大致理解为,当前线程运行到这个方法时,会被挂起。而只有调用join方法的线程运行完毕 当前线程才继续运行。
一个简单的例子:
package com.thread;import java.util.concurrent.atomic.AtomicInteger;/*** @Description:* @Date: create in 2018-07-11 15:54* @Author:Reynold-白*/ public class ThreadTestJoin implements Runnable {private static AtomicInteger a;public ThreadTestJoin(){a = new AtomicInteger(0);}@Overridepublic void run() {for(int i = 0; i < 5; i++){System.out.println("当前线程:" + Thread.currentThread().getName() + "a 的自增结果:" + a.get());a.getAndIncrement();}}/*** 当 t1调用join时,主线程暂停,t1继续运行直到die 后main才继续从join方法后执行。* 但再有个T2呢?**** @param args* @throws Exception*/public static void main(String[] args) throws Exception {Thread t1 = new Thread(new ThreadTestJoin()); // Thread t2 = new Thread(new ThreadTestJoin());t1.start();t1.join(); //等待线程 t1 终止 main才继续 t2并未执行,这样就是顺序的了 // t2.start(); // t2.join();System.out.println();System.out.printf("主方法中输出 a : %d\n", a.get());}}
简单解释就是主线程执行到t1.join时,被挂起。知道t1运行完毕才执行下面的代码。
运行结果:
当我把代码中的注释放开时运行结果是:
解释:
因为当主线程运行到t1.join时,t2还没有启动(还没start呢!!),主线程就被挂起了。所以会有t1执行完再执行t2的这种结果,等t1执行完毕,主线程恢复,往下运行, 这是t2才开始运行。
但如果再换种写法呢:
运行结果:
结果显示。。我的代码中 那个a的值 初始化有些问题。。。。后期修改。尴尬。继续看join
主线程在运行t1.join前已经将两个线程启动了(不一定那个线程获取cpu资源多,有可能t2获得资源多,先执行完毕就跟图里一样,也有可能是t1先执行完毕,剩下的都是t2的信息,也有可能是交替的情况)。到了t1.join时,主线程被挂起,t2也会被挂起(如果t2还没有执行完毕)。
那要怎么实现串行呢,实现串行最直观的方案是什么呢?
其实 在run中在new 一个线程 再来一个类似递归的方法就可以了,这样就能形成一个模型:
主线程调用T1 T1 调用T2 T2.join T1会被挂起 T1.join main会被挂起。这样就是一个串行了。
转载于:https://my.oschina.net/u/2543341/blog/1844485
关于线程join方法的理解相关推荐
- python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...
- java线程join方法
java线程join方法 1.join方法 join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权.调用join方法的线程的上级线程必须等待调用j ...
- java线程join方法会释放锁吗
java线程join方法会释放锁吗,虽然join底层使用wait,wait是释放锁的 wait()和join()的调用方的区别: object.wait()和thread.join() join()的 ...
- Thread.Join()方法的理解
关于C#中Thread.Join()的一点理解 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解. Thread.Join()在MSDN中 ...
- python线程join方法_Python多线程join()用法
Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一:主进程结束,子进程继续执行 当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- python线程join方法
前言: join方法的作用是同步线程. 1.不使用join方法: 当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完, ...
- Java中join()方法的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...
- JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...
- 61_有关多线程中join方法详解
Java中join()方法的理解 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后, ...
- 多线程 join 方法
多线程 join 方法 1.前言 本节对 join 方法进行深入的剖析,主要内容点如下: 了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础: 了解 join ...
最新文章
- ProxylessNAS pytorch
- 最新elasticsearch 8.0 安装配置
- 机器学习-分类算法-K-近邻算法06
- html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法
- Windows 服务程序编写
- 点赞!这4款你常用的App已上线隐私政策
- macbook系统安装服务器,SVN-Mac安装服务器
- 学习linux心得,linux学习心得范文
- 《史蒂夫·乔布斯传》中文PDF文字版官方传记电子书下载
- 徐俊明《图论及其应用》教学大纲
- SRIO的介绍和IP核解析
- python鼠标移动的方法_python自动化之鼠标移动
- [!] The `Paopao [Debug]` target overrides the `PODS_ROOT` build setting defined in `Pods/Target Supp
- 面部识别软件揭示家族成员相似性
- Python每日一记127文本型数字转化为数值型数字(eval函数)
- 微信小程序校园生活小助手+后台管理系统前后分离VUE
- IPTV系统云桌面管理:开机广告+三方apk管理+图文介绍
- 5089. 安排会议日程
- 微信中无法打开分享的链接地址,显示已停止访问该网页的处理方式
- 从数据到知识,爱数告诉你总共需要几步
热门文章
- Atitit 收入理论大总结 4位一体 4象限理论 财政收入理论 6位一体
- lassAtitit事件代理机制原理 基于css class的事件代理的事件代理titi
- Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现
- atitit查询表修改表字段没反应--解锁锁定的表
- paip.重装系统后firefox火狐收藏夹的恢复
- paip.html调试工具--显示控件名称与值
- PAIP.http post 400错误
- 阿里巴巴大规模稀疏模型训练/预测引擎 DeepRec 正式开源
- 阿里云存储负责人吴结生:我经历的三个重大决策
- 【优化算法】矮猫鼬优化算法(DMO)【含Matlab源码 611期】