Thread的join()方法的作用

join()方法使得主线程等待特定线程执行完毕后再继续。它通过Object的wait()实现,确保主线程在子线程完成后再执行。在示例中,t1.join()和t2.join()使主线程依次等待t1和t2执行结束,但t1和t2是并行运行的,不受彼此join()调用影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


官方文档对join()的解释:

Thread.join() method javadocs(点击跳转)

join() Waits for this thread to die.
在这里插入图片描述

线程类的 join()方法将等待子线程完成,然后继续当前线程。join()看起来像子线程加入主线程。如果你想知道子线程的结果,join()可以帮助你阻塞主线程直到子线程完成(死亡)。
join()方法是通过Object提供的wait()来实现的。

主线程-->----->----->----->---->--block##########continue--->---->
                 \                 |               |
	 子线程 start()\                | join()        |
                   \               |               |
                    ---子线程----->--->--->--->--->完成   

结合实例解释

下面的代码中,t1.join()t2.join()的作用是什么?

Thread t1 = new Thread(...);
Thread t2 = new Thread(...);
t1.start();
t2.start();
try {
   t1.join();
   t2.join();
} catch (InterruptedException e) {
   e.printStackTrace();
}

上面示例代码运行在某个线程中,我们默认其为主线程在运行,也就是大多数情况。

1 - 主线程创建并且启动t1t2线程,它们俩开始并行运行
2 - 主线程调用t1.join()来等待t1线程执行完毕
3 - t1线程执行完毕,并且t1.join()方法在主线程中返回(注意:t1线程可能在join()被调用之前就已经执行完毕,此时直接返回)
4 - 主线程调用t2.join()来等待t2线程执行完毕
5 - t2线程执行完毕(可能在t1线程完成之前执行完毕)t2.join()在主线程中返回

  • 重要的是要理解 t1t2线程一直并行运行,但是启动它们的主线程需要等到它们完成才能继续运行。
  • t1t2可能在主线程调用 join()之前就已经完成了。如果是这样,那么join()将不会等待,会立即返回。

t1.join()意味着t2线程停止直到t1线程执行完毕吗?

  • 不是。调用 t1.join()的主线程将停止运行并等待 t1线程完成。t2线程并行运行,完全不受t1t1.join()调用的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值