2016-10-03 61 views
-1

現在使用這個偉大的頁面的問題和答案已超過2年了,我決定加入社區!只讀對象和多線程

現在我的問題:

我有一個朋友的討論,一天:我們認爲,這其中的變量是隻讀或只由線程讀取不需要鎖或其他任何東西,以保證讀取正確的值。但是像arraylist,hashmaps這樣的其他對象又有什麼用?我是否確切地知道,多個線程可以毫無問題地立即使用任何對象的值?

不要對我太苛刻,如果我問了錯誤的方式或錯過了我的思維過程中顯而易見的東西(仍然在考慮原子性......)。我現在沒有任何答案:)

+0

這樣的變量應該聲明爲final,然後是線程安全的。 – olsli

回答

0

如果Map/List的建設是線程安全的感激,如果該ArrayListHashMap沒有改變後建設,那麼,你的線程將能夠讀取數據正確。如果添加新數據或者修改了現有數據,那麼如果沒有正確的同步,則不能保證新的更改對其他線程可見。

0

您的自定義共享數據/對象需要不可變/可寫/一次/只讀 - 構造後類型。

OR

您需要同步您的收藏類型。 您可以使用與JSR 166一起發佈的java.util.concurrent包中的集合類型,也可以使用java.util.Collections.synchronizedCollection(Collection obj)函數同步您的集合。

請記住,與多線程操作的synchronizedCollection相比,併發收集速度更快且優化得多。