在第一個Java線程我:Java:只有在等待時才能通知線程?
while (!isDone) {
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
doSomeVeryLongRunningTask();
}
在另一個線程,我想發出一個通知信號:
synchronized (thr1) {
thr1.notify();
}
但是,如果doSomeVeryLongRunningTask()
方法運行,我不想第二個線程被阻止。我只想通知第一個線程,如果它正在等待,以便第二個線程可以在不鎖定的情況下繼續執行任務。
我該如何修復上面的代碼才能實現這一目標?
「您想解決的問題不存在。」感謝您的回覆。你幫我看到了我提供的縮短問題的一個問題......'doSomeVeryLongRunningTask()'是一種同步方法。我應該刪除那裏的同步。您發佈的其他解決方案爲我提供了一些其他想法。謝謝。 – kmccoy