我想创建一个方法来安全地停止在循环中运行的线程,允许最后一个循环在将控制权返回给停止器之前完成。
现在,无论我尝试什么,我都会冻结。可能摆脱僵局或诸如此类;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
可以解决问题,但我似乎无法获得正确的组合。
任何的想法?