Machine-translated by Google. Questions are authored in English.
Top

Discussion

Consider a notify that arrives before the matching wait. Which statement is correct?

// thread A                     // thread B
synchronized (lock) {           synchronized (lock) {
    lock.notify();                  lock.wait();
}                               }

  • A.An IllegalMonitorStateException is thrown by the wait() call.
  • B.The waiting thread may never wake.
  • C.The waiting thread wakes immediately.
  • D.The waiting thread wakes after a default timeout of one second.

Answer: B

A monitor keeps no record of notifications. If notify() runs before the other thread reaches wait(), the signal is simply discarded and the later wait blocks with nothing left to wake it. This is the lost-wakeup problem, and it is why the condition is tested inside a synchronized region before waiting at all.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.