Ich habe eine Klasse namens Communicator. Diese Klasse ist ein Listener eines Threads, der Ereignisse von einem anderen Programm empfängt. Auch diese Klasse hat eine Methodenaufrufaktualisierung, die sendet und eine Aktion an das Programm a wartet auf die Antwort, die durch den Listener kommt.Wie mit Java-Threads umgehen
Beide Methoden sind in der gleichen Klasse, aber von verschiedenen Threads aufgerufen.
public void processRefreshEvent(ManagerEvent event){
//processing event
//...
//I'm done
notify();
}
public synchronized void refresh() throws Exception {
isRefreshing = true;
try {
manager.send(new refresh());
} catch (ManagerException e) {
isRefreshing = false;
}
try {
wait(5000);
} catch (InterruptedException e) {
} finally{
isRefreshing = false;
}
}
bei der Ausführung des Codes oben ich die Folge Ausnahme erhalten:
java.lang.IllegalMonitorStateException: current thread not owner at java.lang.Object.wait(Native Method) at Communicator.refresh(Communicator.java:203) ...
Was ist der richtige Weg ist, „warten“ für einen anderen Thread zu beenden. Vielen Dank.
Nur um klar zu sein, bedeutet "jeder Thread" "eine der wartenden Threads" nicht "alle wartenden Threads". – erickson
Beachten Sie auch, dass der wartende Thread aus eigenem Antrieb aufwachen kann. –