在第一个Java线程我:Java:只有在等待时才能通知线程?
while (!isDone) {
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
doSomeVeryLongRunningTask();
}
在另一个线程,我想发出一个通知信号:
synchronized (thr1) {
thr1.notify();
}
但是,如果doSomeVeryLongRunningTask()
方法运行,我不想第二个线程被阻止。我只想通知第一个线程,如果它正在等待,以便第二个线程可以在不锁定的情况下继续执行任务。
我该如何修复上面的代码才能实现这一目标?
“您想解决的问题不存在。”感谢您的回复。你帮我看到了我提供的缩短问题的一个问题......'doSomeVeryLongRunningTask()'是一种同步方法。我应该删除那里的同步。您发布的其他解决方案为我提供了一些其他想法。谢谢。 – kmccoy