Я пытаюсь заставить notifyAll () и wait () работать для другого куска кода. Поэтому я создал новую программу, которая ведет себя аналогично другой программе.
В моей программе основной поток создал отдельный поток, который будет запускать notifyAll () через 20 секунд, а мой основной поток будет ждать 60 секунд. Поэтому у моего основного потока должно быть достаточно времени для вызова wait (), прежде чем отдельный поток вызовет notifyAll (). Но проблема в том, что мой основной поток не просыпается от notifyAll () и ждет полных 60 секунд. Почему это не работает?
Мой код выглядит так:
new Thread(new Runnable(){
public void run(){
synchronized (this){
try{
this.wait(20000);
System.out.println("Wait 20 seconds then notify");
this.notifyAll();
} catch (Exception e){}
}
}
}, "test Thread").start();
System.out.println("started thread");
boolean timeout = false;
System.out.println("Start Waiting");
synchronized (this){
try{
this.wait(60000);
timeout = true;
} catch(Exception e){
System.out.println("Did not wait 60 seconds");
}
}
if (timeout){
System.out.println("Waited 60 Seconds");
}
И вывод, который я получаю:
started thread
Start Waiting
Wait 20 seconds then notify
Waited 60 Seconds