我想製作一種方法,可以安全地停止循環中運行的線程,允許在將控制權返回到制動器之前完成最後一個循環。等待線程循環完成
現在,無論我嘗試什麼,我都會凍結。可能出於僵局或什麼; 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,不是? –