Ich habe eine Funktion innerhalb einer Runnable Klasse A:Kann nicht bekommen notifyAll als
public void function1(){
synchronized(lock){
function2.decrease();
lock.notifyAll();
System.out.print(function2.getValue());
}
Ich habe eine andere Funktion innerhalb eines Runnable Klasse B:
public void function3(){
try{
synchronized(lock){
while(!(function2.getValue() != 0)){
lock.wait();
}
Thread.sleep(1000);
System.out.println(function2.getValue() + 10);
}
}catch(InterruptedException e){
System.err.println(e);
}
}
Als ich führe das Programm aus, das immer in Funktion1 gedruckt wird, bevor es in Funktion3 druckt, selbst wenn die Wartebedingung wahr ist.
Was muss ich tun, um den Wert in Funktion3 zu drucken, bevor der Wert in Funktion1 gedruckt wird?
Brauchen Sie die while-Schleife sowieso nicht, wegen eines unerwünschten Weckrufs? –
Sie haben Recht. Ging mir nicht in den Sinn, als ich meine Antwort schrieb. Sie würden auch eine while-Schleife benötigen, die function1 wait() basierend auf einer anderen Bedingung umschließt, möglicherweise eine boolesche Funktion von function3 ... – HunterCM