我想制作一种方法,可以安全地停止循环中运行的线程,允许在将控制权返回到制动器之前完成最后一个循环。等待线程循环完成
现在,无论我尝试什么,我都会冻结。可能出于僵局或什么; 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
之前调用,调用者将冻结。
我确定玩环绕的块可以解决问题,但我似乎无法得到正确的组合。
有什么想法?
如果你保留这个,使用私有同步stopSafely(){isRunning = false;}这是更简单和等效。 – Snicolas
但是,像你一样同步整个运行方法并不是一个好主意。 – Snicolas
正如所写,这将阻止任何呼叫stopSafely,不是? –