从文档中
join方法允许一个线程等待完成 另一个。如果t是当前正在执行其线程的Thread对象,
t.join();
使当前线程暂停执行直到t的线程 终止
我无法理解的是,这是线程上的一种方法,该方法不同于被调用的方法。因此,如果线程t1
调用了另一个线程的t2.join()
,则t2
对t1
一无所知。那么到底是什么使t1
等待t2
完成呢?
答案 0 :(得分:1)
通过查看Java源代码:
从t1调用t2.join()将使t1在t2对象上等待(t2是Thread
,它是Object
的子类)。只要t1仍然存在,等待将永远存在。当t2线程完成工作时,它将调用Object.notifyAll()
,以便t1唤醒。
答案 1 :(得分:0)
Thread.join
的经典实现(其他实现也是可能的,是锁定Thread
对象,测试wait
上是否有效,Thread
对象。线程退出时,它将锁定其实例并调用notifyAll
。
不幸的是,选择公共对象作为锁。