Sobes.tech
Junior — Middle

Na ktorých prvkoch je bezpečné volať metódu wait() v synchronizovanom kontexte?

sobes.tech AI

Odpoveď od AI

Metóda wait() v Jave sa môže volať iba na objektoch, ktorých monitor (zámok monitora) je prevzatý aktuálnym vláknom, teda v rámci synchronizovaného bloku alebo synchronizovanej metódy na tomto objekte. To znamená, že je bezpečné volať wait() iba na objektoch, na ktorých držíte monitor, napríklad:

synchronized (obj) {
    obj.wait(); // bezpečne
}

Ak zavoláte wait() mimo synchronizovaného kontextu na tomto objekte, bude vyhodená výnimka IllegalMonitorStateException. Preto môžete volať wait() iba na objektoch, na ktorých aktuálne vlákno drží monitor (t.j. v rámci synchronized(obj) alebo synchronizovanej metódy tohto objektu).