ExpertiDict

Java · Avançado · Inglês · Técnico

wait and notify

/weɪt ænd ˈnoʊtɪfaɪ/substantivo

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.

Veja também

Todos os termos de Java