2016-04-29 73 views
-1

如果我有多個並行運行的線程並且每個線程使用相同的HashMap實例,那麼它很好嗎? HashMap對象只能用於讀取數據。在任何線程中都不會有數據寫入HashMap我可以在多個並行運行的線程中使用同一個實例嗎?

要清楚,HashMap實例是一個基類的成員,我將在其子類中調用後臺線程。那些線程將參考HashMap對象。

+3

http://stackoverflow.com/questions/104184/is-it-safe-to-get-values-from-a-java-util-hashmap-from-multiple-threads-no-modi – mastov

+0

if you'只從相同的字段讀取**可以安全地使用它 - 但請注意,多個線程可能會同時讀取相同的值。 – specializt

+0

@mastov謝謝!沒有找到這個答案。 –

回答

1

如果線程只能從HashMap讀取,那麼這是沒有問題的。至少有一個線程正在修改HashMap而其他人可能正在同時讀取它,否則您將遇到麻煩。

Java確實有其他的Map實現可以同時使用,比如java.util.concurrent.ConcurrentHashMap

+0

也許從https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html添加「此實現不同步」引用。 –

+0

@AndyTurner當線程只讀並不寫入'HashMap'時,它並不真正相關。 – Jesper

+0

好吧,它有點。它表示,在結構上修改地圖並從多個線程讀取地圖時,需要進行同步。雖然這並沒有明確說明只讀時不需要同步,但我認爲這是缺席的暗示。 –

相關問題