Sobes.tech
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() alebo notifyAll() 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í
}