我正在一個項目中,其中一個線程分叉了4個其他線程並等待它們完成。分叉螺紋應該能夠隨時停止分叉螺紋。 要,完成同樣的,我做了一件這樣:從線程開始新線程
class ForkedThread implements Runnable {
public boolean keepRunning = true;
public void run() {
while(keepRunning is true){
//Do the Job
}
}
}
現在既然keepRunnig是公開的,它可以從外部訪問,可以爲假。 我的問題是我將不得不同步使用keeprunning或罰款。其次,這種技術是否可行。或者我應該使用ThreadPool
來完成我的工作。 其實,使用ThreadPool
會增加我不想要的代碼的複雜度。請幫忙。
這非常符合布爾值的問題!否則,JVM可以自由地讀取'keepRunning'一次,看到它是真的,將它存儲在本地緩存中(例如在CPU上),並從此處繼續讀取它。如果另一個線程修改它,則JVM沒有義務更新其緩存;你可以永遠旋轉。 'volatile'可以防止這種情況發生。這不僅僅是學術;我可以在我的雙核筆記本電腦上輕鬆製作它。 – yshavit
+1 yshavit ...謝謝,所以我們都學習... –