コミュニケータと呼ばれるクラスがあります。このクラスは、別のプログラムからイベントを受け取るスレッドのリスナーです。また、このクラスはメソッド呼び出しをリフレッシュして、プログラムにリスナー経由の応答を待ってアクションを送信します。Javaスレッドの処理方法
どちらのメソッドも同じクラスにありますが、異なるスレッドによって呼び出されます。
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;
}
}
I上記のコードを実行する次の例外を取得:
java.lang.IllegalMonitorStateException: current thread not owner at java.lang.Object.wait(Native Method) at Communicator.refresh(Communicator.java:203) ...
仕上げに別のスレッドのために「待機」する適切な方法は何ですか。ありがとう。
"すべてのスレッド"は、 "待機中のスレッドのうちのどれか"を意味し、 "すべての待機スレッド"ではありません。 – erickson
待機中のスレッドは、それ自身の目覚めを起こすことがあります。 –