thread.join()在概念上如何工作?

时间:2018-11-21 03:51:18

标签: java multithreading

从文档中

  

join方法允许一个线程等待完成   另一个。如果t是当前正在执行其线程的Thread对象,

     

t.join();

     

使当前线程暂停执行直到t的线程   终止

我无法理解的是,这是线程上的一种方法,该方法不同于被调用的方法。因此,如果线程t1调用了另一个线程的t2.join(),则t2t1一无所知。那么到底是什么使t1等待t2完成呢?

2 个答案:

答案 0 :(得分:1)

通过查看Java源代码:

从t1调用t2.join()将使t1在t2对象上等待(t2是Thread,它是Object的子类)。只要t1仍然存在,等待将永远存在。当t2线程完成工作时,它将调用Object.notifyAll(),以便t1唤醒。

答案 1 :(得分:0)

Thread.join的经典实现(其他实现也是可能的,是锁定Thread对象,测试wait上是否有效,Thread对象。线程退出时,它将锁定其实例并调用notifyAll

不幸的是,选择公共对象作为锁。