Junior — Middle
Čo sa stane s tokom, ak vo vnútri metódy označenej ako synchronized zavoláte metódu wait() na aktuálnom objekte?
sobes.tech AI
Odpoveď od AI
Ak vo vnútri metódy označenej kľúčovým slovom synchronized zavoláte metódu wait() na aktuálnom objekte, vlákno:
- Uvoľní monitor (zámok) objektu, čím umožní iným vláknam vstúpiť do synchronizovaného bloku alebo metódy.
- Prejde do stavu čakania (
wait), kým iné vlákno ne zavolánotify()alebonotifyAll()na tom istom objekte.
Týmto spôsobom wait() dočasne pozastaví vykonávanie aktuálneho vlákna a uvoľní monitor, čo pomáha predchádzať vzájomnému zablokovaniu a umožňuje kooperatívnu prácu vlákien.
Príklad:
synchronized(this) {
while (!podmienka) {
wait(); // uvoľní monitor a čaká na oznámenie
}
// kód, ktorý sa vykoná po prebudení
}