waité definido em Object, e não ele Thread. O monitor ligado Threadé um pouco imprevisível.
Embora todos os objetos Java tenham monitores, geralmente é melhor ter um bloqueio dedicado:
private final Object lock = new Object();
Você pode obter um pouco mais fácil de ler os diagnósticos, com um pequeno custo de memória (cerca de 2 K por processo) usando uma classe nomeada:
private static final class Lock { }
private final Object lock = new Lock();
Para / waitou um objeto, você precisa estar segurando a trava com a instrução Além disso, você precisará de um loop para verificar a condição de ativação (encontre um bom texto sobre o encadeamento para explicar o porquê).notifynotifyAllsynchronizedwhile
synchronized (lock) {
while (!isWakeupNeeded()) {
lock.wait();
}
}
Para notificar:
synchronized (lock) {
makeWakeupNeeded();
lock.notifyAll();
}
Vale a pena entender a linguagem Java e os java.util.concurrent.locksbloqueios (e java.util.concurrent.atomic) ao entrar no multithreading. Mas use java.util.concurrentestruturas de dados sempre que puder.