文章目录
- 官方文档对join()的解释:
- 结合实例解释
官方文档对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 - 主线程创建并且启动
t1和t2线程,它们俩开始并行运行
2 - 主线程调用t1.join()来等待t1线程执行完毕
3 -t1线程执行完毕,并且t1.join()方法在主线程中返回(注意:t1线程可能在join()被调用之前就已经执行完毕,此时直接返回)
4 - 主线程调用t2.join()来等待t2线程执行完毕
5 -t2线程执行完毕(可能在t1线程完成之前执行完毕)t2.join()在主线程中返回
- 重要的是要理解 t1和t2线程一直并行运行,但是启动它们的主线程需要等到它们完成才能继续运行。
- t1或- t2可能在主线程调用- join()之前就已经完成了。如果是这样,那么- join()将不会等待,会立即返回。
t1.join()意味着t2线程停止直到t1线程执行完毕吗?
- 不是。调用 t1.join()的主线程将停止运行并等待t1线程完成。t2线程并行运行,完全不受t1或t1.join()调用的影响。




















