Уведомление немедленно вызывает ожидающий поток? - PullRequest
0 голосов
/ 25 мая 2020

Я пишу код Java, в котором уведомление вызывается в ожидающем потоке после выполнения определенного условия, но ожидающий поток не запускается немедленно. В чем может быть причина?

1 Ответ

0 голосов
/ 26 мая 2020

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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...