join()介绍

join() 定义在Thread.java中。
join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解:
// 主线程
public class Father extends Thread {
public void run() {
Son s = new Son();
s.start();
s.join();
...
}
}
// 子线程
public class Son extends Thread {
public void run() {
...
}
}
说明:
上面的有两个类Father(主线程类)和Son(子线程类)。因为Son是在Father中创建并启动的,所以,Father是主线程类,Son是子线程类。
在Father主线程中,通过new Son()新建“子线程s”。接着通过s.start()启动“子线程s”,并且调用s.join()。在调用s.join()之后,Father主线程会一直等待,直到“子线程s”运行完毕;在“子线程s”运行完毕之后,Father主线程才能接着运行。 这也就是我们所说的“join()的作用,是让主线程会等待子线程结束之后才能继续运行”!
join()源码分析(基于JDK1.7.0_40)
public final void join() throws InterruptedException {
join(0);
}
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;
}
}
}
说明:
从代码中,我们可以发现。当millis==0时,会进入while(isAlive())循环;即只要子线程是活的,主线程就不停的等待。
我们根据上面解释join()作用时的代码来理解join()的用法!
问题:
虽然s.join()被调用的地方是发生在“Father主线程”中,但是s.join()是通过“子线程s”去调用的join()。那么,join()方法中的isAlive()应该是判断“子线程s”是不是Alive状态;对应的wait(0)也应该是“让子线程s”等待才对。但如果是这样的话,s.join()的作用怎么可能是“让主线程等待,直到子线程s完成为止”呢,应该是让"子线程等待才对(因为调用子线程对象s的wait方法嘛)"?
答案:wait()的作用是让“当前线程”等待,而这里的“当前线程”是指当前在CPU上运行的线程。所以,虽然是调用子线程的wait()方法,但是它是通过“主线程”去调用的;所以,休眠的是主线程,而不是“子线程”!
join()示例
在理解join()的作用之后,接下来通过示例查看join()的用法。
// JoinTest.java的源码
public class JoinTest{
public static void main(String[] args){
try {
ThreadA t1 = new ThreadA("t1"); // 新建“线程t1”
t1.start(); // 启动“线程t1”
t1.join(); // 将“线程t1”加入到“主线程main”中,并且“主线程main()会等待它的完成”
System.out.printf("%s finish\n", Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
static class ThreadA extends Thread{
public ThreadA(String name){
super(name);
}
public void run(){
System.out.printf("%s start\n", this.getName());
// 延时操作
for(int i=0; i <1000000; i++)
;
System.out.printf("%s finish\n", this.getName());
}
}
}
运行结果:
t1 start
t1 finish
main finish
结果说明:
运行流程如图
(01) 在“主线程main”中通过 new ThreadA("t1") 新建“线程t1”。 接着,通过 t1.start() 启动“线程t1”,并执行t1.join()。
(02) 执行t1.join()之后,“主线程main”会进入“阻塞状态”等待t1运行结束。“子线程t1”结束之后,会唤醒“主线程main”,“主线程”重新获取cpu执行权,继续运行。
以上所述是小编给大家介绍的Java线程之join_动力节点Java学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# 线程
# join
# java基本教程之join方法详解 java多线程教程
# Java线程编程中isAlive()和join()的使用详解
# Java join 线程控制用法
# Java多线程ForkJoinPool实例详解
# java多线程编程之join方法的使用示例
# Java多线程中关于join方法的使用实例解析
# Java使用join方法暂停当前线程
# 浅谈Java线程Thread.join方法解析
# 浅谈java多线程 join方法以及优先级方法
# 浅谈java线程join方法使用方法
# java 线程方法join简单用法实例总结
# 结束之后
# 才对
# 小编
# 的是
# 应该是
# 是在
# 在此
# 是这样
# 是指
# 它是
# 这句话
# 我们可以
# 这也
# 给大家
# 如图
# 也应
# 所述
# 给我留言
# 感谢大家
# 而不是
相关文章:
C#怎么创建控制台应用 C# Console App项目创建方法
青浦网站制作公司有哪些,苹果官网发货地是哪里?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何在阿里云购买域名并搭建网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
建站之星客服服务时间及联系方式如何?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
南宁网站建设制作定制,南宁网站建设可以定制吗?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何在云主机上快速搭建多站点网站?
如何用景安虚拟主机手机版绑定域名建站?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何基于云服务器快速搭建网站及云盘系统?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
网站制作话术技巧,网站推广做的好怎么话术?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何通过主机屋免费建站教程十分钟搭建网站?
淘宝制作网站有哪些,淘宝网官网主页?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何快速启动建站代理加盟业务?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站之星免费版是否永久可用?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
学校建站服务器如何选型才能满足性能需求?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
已有域名和空间,如何快速搭建网站?
建站主机默认首页配置指南:核心功能与访问路径优化
清除minerd进程的简单方法
在线教育网站制作平台,山西立德教育官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
常州自助建站费用包含哪些项目?
建站之星展会模板:智能建站与自助搭建高效解决方案
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
微课制作网站有哪些,微课网怎么进?
如何通过多用户协作模板快速搭建高效企业网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
如何在阿里云高效完成企业建站全流程?
如何用低价快速搭建高质量网站?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
*请认真填写需求信息,我们会在24小时内与您取得联系。