浅析Thread的join() 方法
Thread中的 join() 方法在实际开发过程中可能用的不是很多,但是在面试中作为考察基本功知识的扎实与否,经常会被用到。因此,对于 Thread 的 join() 方法进行了一定的研究。
常见的一种情景是如何保证创建多个线程保证其按照指定的顺序执行,最简单的一种方法是采用Thread.join() 方法来实现。以下是写的创建若干个线程的示例代码,通过采用创建一个实体类,重写其里面的run 方法来实现。如果指定少数的线程数,可以直接采用 thread.join()来实现,其原理是一致的。
public class Demo extends Thread{
int i;
Thread previousThread;
public Demo3(int i, Thread previousThread) {
this.i = i;
this.previousThread = previousThread;
} @Override
public void run(){
try {
previousThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("顺序:"+i);
} public static void main(String[] args) {
Thread previousThread = Thread.currentThread();
for (int i=0; i<10; i++){
Demo3 demo3 = new Demo3(i, previousThread);
demo3.start();
previousThread = demo3;
} } }
上述代码实现了想要的业务逻辑需求,那么其原理又是什么呢?老规矩,看源码。
我们可以发现,其保证多个线程按照顺序执行的根本是采用了 wait()方法。当 millis为0时,表示没有设置阻塞的时间,通过 isAlive()方法判断线程的存活状态;若存活,则一直等待。只有当这个线程不存活时,才会停止阻塞,即保证了线程的顺序执行。需要注意的一点时,因为调用了 wait() 方法,因此其必须用 synchronized 修饰,保证在方法层面上的同步。
浅析Thread的join() 方法的更多相关文章
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- Thread 的join方法
package com.cn.test.thread; public class TestJoin extends Thread{ private String name; public TestJo ...
- python thread的join方法解释
python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...
- 8.Thread的join方法
1.Thread类的join方法表示:当前线程执行结束再执行其它线程!在Thread类中有三个重载的方法分别是: public final synchronized void join(long mi ...
- java线程基础巩固---分析Thread的join方法详细介绍,结合一个典型案例
关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下. 首先先观察下JDK对它的介绍: 其实 ...
- Thread的join方法
一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程. Thread.Join方法的使用场景:调用线程挂起,等待被调用线程执行完毕后,继续执行. 如下案列: 当NewT ...
- Thread中join()方法进行介绍
http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details ...
- 浅谈Java多线程中的join方法
先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...
- Java多线程中的join方法
新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name ...
随机推荐
- 总结JavaScript对象的深浅拷贝
十四.对象的浅拷贝与深拷贝 什么是对象的拷贝? 将一个对象赋值给另外一个对象, 我们称之为对象的拷贝 什么是深拷贝, 什么是浅拷贝? 我们假设将A对象赋值给B对象 浅拷贝是指, 修改B对象的属性和方法 ...
- Flutter 基础布局Widgets之Align
Align的作用是为了设置子child的对齐方式,一般作为其他控件的一个参数. 构造函数 const Align({ Key key, this.alignment = Alignment.cente ...
- 浅谈Linux与unix系统的来历
在今天的UNIX是商业化的,UNIX系统大多是与硬件配套的,也就是说,大多数UNIX系统如AIX.HP-UX等是无法安装在 x86 服务器和个人计算机上的,UNIX系统是一个分时系统,而UNIX是至关 ...
- windows下修改tomcat的startup.bat脚本文件后台运行
1.修改startup.bat文件 rem Get remaining unshifted command line arguments and save them in the set CMD_LI ...
- web前后端交互,nodejs
手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 web前后端交互 前后端交互可以采用混合 ...
- OpenResty + ngx_lua_waf使用
本篇介绍在CentOS7.6上安装.测试使用ngx_lua_waf + openresty. Preface # yum install epel-release -y # yum group ins ...
- 字节码操作、javassist使用
一.功能 1.动态生成新的类 2.动态改变某个类的结构(添加.删除.修改 新的属性.方法) 二.优势 1.比反射开销小,性能高 2.JAVAasist性能高于反射,低于ASM 使用javassis ...
- [Contract] Solidity 遍历 mapping 的一种方式
思路:为需要遍历的 mapping 再准备一个 list,之后通过 for 循环遍历 list 取得 mapping 的 key. mapping (address => uint) users ...
- C#XML文件操作随笔
以为公司一直没有电源屏厂家协议解析为DevVars相关的软件,手写费时费力还容易出错,用了2天时间做了一个.txt协议文件筛选加并解析成xml文件的工具,总结一下用到的几个知识点 1.LINQ 是一个 ...
- 企业应用开发的大趋势,65%的应用开发将通过低代码完成 ZT
全球知名的咨询公司Gartner于近日发表了最新版的<低代码开发平台魔力象限>,并在报告中指出,到2024年65%的应用开发工作都将通过低代码的方式完成.Gartner长期关注软件开发领域 ...