等待(长时间超时)和连接(长时间)之间的区别?

whi*_*hat 5 java multithreading join wait

在thread-2上由thread-1调用时,wait()和join()方法都会使thread-1等待某个时间或者直到thread-2完成.

如果我们使用这些方法的重载版本,即wait(长超时)和join(long millis),那么

  1. 在等待(长时间超时)的情况下,线程1将通过notify(或notifyall)变为可运行,或甚至发生超时(以先到者为准).

  2. 在join(long millis)的情况下,thread-2将在thread-2完成或超时发生时(以先到者为准)运行.

那么这两个实现之间有什么区别呢?

我认为有些是: -

  1. 对于wait(),我们需要锁定我们正在等待的对象.对于join(),这些不是必需的.
  2. 执行wait()之后,线程会删除它获得的锁定,并在锁定再次运行后重新获得锁定.但是加入呢?如果从同步块(或方法)执行此操作,则线程是否在执行连接后删除锁定?

Jon*_*eet 6

正如你所说,"发布"过程是完全不同的 - 在它基于的情况下notify(),另一个基于线程完成.他们是完全不同的电话,完全不同的目的.

事实上,也有明确的警告wait()Thread显示器(虽然我不能马上找到这些警告),内部的Java代码获取用于他们的锁(并使用wait/ notify本身).

不过没有关系,呼吁join()Thread ,如果当前正在执行的线程拥有它释放的显示器.

基本上,你根本不应该认为它们是相似的 - 一个是等待线程终止; 另一种是等待合作协调.