2016-03-04 32 views
0

我在執行線程時遇到問題。當我在執行另一個更新該對象的線程時,我從主線程中刪除一個對象時發生問題。到第二個線程嘗試更新對象的那一刻,並且由於對象不再存在而發生異常。我的問題如下:在運行我的特殊線程時,如何阻止其他線程修改我的對象?我希望我的特殊線程優先於應用程序中的其他每個線程。如何在執行線程時阻止對象更改

非常感謝您

+0

這聽起來像你想要一個讀寫器鎖 – SLaks

+0

你能提供一些代碼示例在這裏..它會更好地理解上下文 –

+2

建議你的工作方式Java併發教程:http://docs.oracle.com/javase/tutorial/essential/concurrency/ –

回答

-1

有你能達到這個多種方式:

(一)(在對象上使用同步塊)的使用鎖或同步的方式同步的刪除和對象訪問調用

(b)編輯:使用原子整數的初始值爲1.將其標記爲0,同時將其標記爲-1,同時修改(完成時將標記重新標記爲1),修改線程將在繼續修改之前檢查if (atomicCounter != 0)對象和刪除線程將在刪除前檢查while (atomicCounter != -1)(即將等待becom e爲)

(c)用類似相反閂倒計時(計數進位鎖存器,它並不在Java庫中存在)

(d)不要做任何事情,如果發生異常,處理得當使用catch和finally並讓線程代碼繼續,因爲你想成爲

+1

你的建議(b)完全不起作用:如果線程A檢查計數器並發現它等於1(可以繼續),會發生什麼情況。然後,線程B將計數器設置爲0並刪除該對象,然後線程A繼續修改...? –

+0

謝謝..我編輯(b)使其工作。 –

+0

仍然不起作用。問題依然存在:兩個併發線程都可以檢查標誌,都發現它等於1,並且兩者都繼續相互干擾。你的情況(b)在測試過程中不太可能發生問題,但它實際上並不能防止問題的發生。 –

相關問題