java – 线程等待另一个线程

我需要在这里解释一下.

 public static void main(String[] args) {
    FirstThread obj = new FirstThread();
    for (int i = 1; i <= 10; i++) {
      new WaiterThread(obj).start();
    }
    obj.start();
  }

public class FirstThread extends Thread {
  @Override
  public void run() {
    // Do something
  }
}


public class WaiterThread extends Thread {
  Object obj;

  WaiterThread(Object obj) {
    this.obj = obj;
  }

  @Override
  public void run() {
    synchronized (obj) {
           obj.wait();
    }
  }
}

为WaiterThread创建了10个线程,正在等待一个FirstThread对象.在FirstThread终止后,所有WaiterThread都恢复,没有在任何地方调用obj.notify()或obj.notifyAll().

这是否意味着WaiterThread停止等待FirstThread因为它被终止了?

最佳答案
根据the documentation of the Thread class,一个垂死的线程在代表它的实例上调用notifyAll.

此外,引用相同的文档:

It is recommended that applications not use wait, notify, or notifyAll on Thread instances.

当然,相同的建议适用于Thread子类的实例,这是您的代码正在执行的操作.

转载注明原文:java – 线程等待另一个线程 - 代码日志