whi*_*hat 5 java multithreading join wait
在thread-2上由thread-1调用时,wait()和join()方法都会使thread-1等待某个时间或者直到thread-2完成.
如果我们使用这些方法的重载版本,即wait(长超时)和join(long millis),那么
在等待(长时间超时)的情况下,线程1将通过notify(或notifyall)变为可运行,或甚至发生超时(以先到者为准).
在join(long millis)的情况下,thread-2将在thread-2完成或超时发生时(以先到者为准)运行.
那么这两个实现之间有什么区别呢?
我认为有些是: -
正如你所说,"发布"过程是完全不同的 - 在它基于的情况下notify()
,另一个基于线程完成.他们是完全不同的电话,完全不同的目的.
事实上,也有明确的警告不叫wait()
上Thread
显示器(虽然我不能马上找到这些警告),内部的Java代码获取用于他们的锁(并使用wait
/ notify
本身).
不过没有关系,呼吁join()
对Thread
不,如果当前正在执行的线程拥有它释放的显示器.
基本上,你根本不应该认为它们是相似的 - 一个是等待线程终止; 另一种是等待合作协调.