wait
(а также notify
) требует снятия монитора синхронизации. Если код, который вызывает notify
, не освобождает его, тогда wait
будет продолжать «ждать», пока монитор не будет выпущен
// wait thread
synchronized (syncObject) {
syncObject.wait(); // to proceed to next line,
// this thread must wait until notify is called
// and then take ownership over syncObject
// next line
}
...
// notify thread
synchronized (syncObject) {
syncObject.wait();
while (true) {}; // infinite loop, syncObject is never released,
// wait thread will never gain ownership over syncObject
// and will never wake up
}