java:wait(),notify()和synchronized块

MRa*_*ser 8 java locking finalizer notify wait

我了解到调用Object的wait()方法将释放对象监视器(如果存在).

但我有一些关于notify()通过另一个线程调用此对象的问题:

  1. 如果另一个(第3个)线程同时拥有对象监视器,那么等待线程是否会被唤醒?

  2. 如果第三个线程调用wait()此对象,那么等待线程会被唤醒吗?

  3. 是否可以确定线程是否在等待通知特定对象(java 1.4/java 5)

  4. 如果wait()finalize()方法中调用会发生什么?

Bor*_*lid 2

  1. notify将唤醒在监视器上等待的一个线程。除非并且直到监视器未被拥有,否则任何等待的线程都不能运行;wait() 必须在同步块中调用,因此必须持有锁才能继续运行该块。
  2. 没有保证。调用notifyAll给所有线程一个唤醒的机会。
  3. 不知道。您可以让线程设置一个变量,表示它在进入睡眠状态之前正在等待......
  4. 这可能是一个坏主意。你能想出一种有必要这样做的情况吗?