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方法的理解相关推荐

  1. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解

    看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...

  2. java线程join方法

    java线程join方法 1.join方法 ​ join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权.调用join方法的线程的上级线程必须等待调用j ...

  3. java线程join方法会释放锁吗

    java线程join方法会释放锁吗,虽然join底层使用wait,wait是释放锁的 wait()和join()的调用方的区别: object.wait()和thread.join() join()的 ...

  4. Thread.Join()方法的理解

    关于C#中Thread.Join()的一点理解 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解. Thread.Join()在MSDN中 ...

  5. python线程join方法_Python多线程join()用法

    Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一:主进程结束,子进程继续执行 当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...

  6. python线程join方法

    前言: join方法的作用是同步线程. 1.不使用join方法: 当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完, ...

  7. Java中join()方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...

  8. JAVA多线程中join()方法的详细分析

    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...

  9. 61_有关多线程中join方法详解

    Java中join()方法的理解 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后, ...

  10. 多线程 join 方法

    多线程 join 方法 1.前言 本节对 join 方法进行深入的剖析,主要内容点如下: 了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础: 了解 join ...

最新文章

  1. ProxylessNAS pytorch
  2. 最新elasticsearch 8.0 安装配置
  3. 机器学习-分类算法-K-近邻算法06
  4. html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法
  5. Windows 服务程序编写
  6. 点赞!这4款你常用的App已上线隐私政策
  7. macbook系统安装服务器,SVN-Mac安装服务器
  8. 学习linux心得,linux学习心得范文
  9. 《史蒂夫·乔布斯传》中文PDF文字版官方传记电子书下载
  10. 徐俊明《图论及其应用》教学大纲
  11. SRIO的介绍和IP核解析
  12. python鼠标移动的方法_python自动化之鼠标移动
  13. [!] The `Paopao [Debug]` target overrides the `PODS_ROOT` build setting defined in `Pods/Target Supp
  14. 面部识别软件揭示家族成员相似性
  15. Python每日一记127文本型数字转化为数值型数字(eval函数)
  16. 微信小程序校园生活小助手+后台管理系统前后分离VUE
  17. IPTV系统云桌面管理:开机广告+三方apk管理+图文介绍
  18. 5089. 安排会议日程
  19. 微信中无法打开分享的链接地址,显示已停止访问该网页的处理方式
  20. 从数据到知识,爱数告诉你总共需要几步

热门文章

  1. Atitit 收入理论大总结 4位一体 4象限理论 财政收入理论 6位一体
  2. lassAtitit事件代理机制原理 基于css class的事件代理的事件代理titi
  3. Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现
  4. atitit查询表修改表字段没反应--解锁锁定的表
  5. paip.重装系统后firefox火狐收藏夹的恢复
  6. paip.html调试工具--显示控件名称与值
  7. PAIP.http post 400错误
  8. 阿里巴巴大规模稀疏模型训练/预测引擎 DeepRec 正式开源
  9. 阿里云存储负责人吴结生:我经历的三个重大决策
  10. 【优化算法】矮猫鼬优化算法(DMO)【含Matlab源码 611期】