2013-01-10 31 views
0

我有一個線程A,它運行另一個線程B. 線程A實現了一個方法「stopExec()」,它試圖完全退出線程B - 允許它完成一些任務。所以我stopExec方法看起來是這樣的:CountDownLatch在嘗試等待時拋出異常()

private CountDownLatch lock; 

public void stopExec() { 
    lock = new CountDownLatch(1); 
    threadB.finish(); 
    try { 
    lock.await(); 
    } catch(InterruptedExcetion ie) { 
    Log.d(null, "Thread A not locked."); 
    } 
    Log.d(null, "Finished."); 
} 

線程B具有參考線程A和調用 「threadA.lock.countDown();」當它完成了它所做的任何事情。

發生異常時發生了什麼......線程A不會等待,而只是繼續。 有人可以解釋我爲什麼/我做錯了什麼。 我在其他情況下以類似的方式使用了CountDownLatch,並且它按預期工作。

謝謝!

+0

我刪除了標籤'android' - 這個問題不是關於** android ** – Andremoniy

+2

顯示threadB代碼 – Blackbelt

+1

顯示threadA代碼以及 – Blackbelt

回答

0
lock = new CountDownLatch(1); 
threadB.finish(); 

此代碼已損壞:它包含一個關於lock變量的數據競賽。嘗試通過使lock變量volatile解決您的問題。

相關問題