Sobes.tech
Junior — Middle

Na jakich elementach można bezpiecznie wywołać metodę wait(), będąc w zsynchronizowanym kontekście?

sobes.tech AI

Odpowiedź od AI

Metoda wait() w Javie może być wywoływana tylko na tych obiektach, których monitor (blokada monitora) został przejęty przez bieżący wątek, czyli wewnątrz zablokowanego sekcji lub metody zsynchronizowanej na tym obiekcie. Oznacza to, że bezpiecznie można wywołać wait() tylko na obiektach, na których utrzymujesz monitor, na przykład:

synchronized (obj) {
    obj.wait(); // bezpieczne
}

Jeśli wywołasz wait() poza zsynchronizowanym kontekstem na tym obiekcie, zostanie rzucony wyjątek IllegalMonitorStateException. Dlatego można wywołać wait() tylko na tych obiektach, na których bieżący wątek utrzymuje monitor (czyli wewnątrz synchronized(obj) lub zsynchronizowanej metody tego obiektu).