【发布时间】:2011-12-09 03:10:09
【问题描述】:
我想创建一个方法来安全地停止在循环中运行的线程,允许最后一个循环在将控制权返回给停止器之前完成。
现在,无论我尝试什么,我都会冻结。可能摆脱僵局或诸如此类; Java 不是我常用的环境,因此为什么这可能是另一个等待/通知问题。
boolean isRunning = true;
@Override
public void run() {
super.run();
while (isRunning) {
// Do work...
}
synchronized(this) {
this.notify();
}
}
public void stopSafely() {
isRunning = false;
try {
synchronized(this) {
this.wait();
}
} catch (InterruptedException ex) {
// Handle...
}
}
这种方法的问题(除了我在this 上进行同步,但这是为了示例简单起见),如果notify 在wait 之前被调用,调用者将冻结。
我确信在synchronized 中使用我环绕的积木可以解决问题,但我似乎无法获得正确的组合。
有什么想法吗?
【问题讨论】:
标签: java multithreading wait notify