Java · Avançado · Inglês · Técnico
wait and notify
Métodos de Object para coordenar threads: wait libera o monitor e espera, notify acorda uma thread. Só funcionam dentro de synchronized no mesmo objeto.
Onde usar
Aparece em código legado de produtor e consumidor e na IllegalMonitorStateException. Hoje se preferem BlockingQueue e Condition.
Em código
synchronized (fila) {
while (fila.isEmpty()) {
fila.wait(); // libera o monitor
}
var item = fila.remove();
}
// produtor: fila.add(x); fila.notifyAll();Exemplos
Call wait inside a while loop, never inside an if.
Chame wait dentro de um laço while, nunca dentro de um if.
You got IllegalMonitorStateException because you called notify outside synchronized.
Você tomou IllegalMonitorStateException porque chamou notify fora do synchronized.
Cuidado
Chame wait sempre dentro de um while que reavalia a condição, por causa de despertares espúrios, e nunca de um if.