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).