如果我有多個並行運行的線程並且每個線程使用相同的HashMap
實例,那麼它很好嗎? HashMap
對象只能用於讀取數據。在任何線程中都不會有數據寫入HashMap
。我可以在多個並行運行的線程中使用同一個實例嗎?
要清楚,HashMap
實例是一個基類的成員,我將在其子類中調用後臺線程。那些線程將參考HashMap
對象。
如果我有多個並行運行的線程並且每個線程使用相同的HashMap
實例,那麼它很好嗎? HashMap
對象只能用於讀取數據。在任何線程中都不會有數據寫入HashMap
。我可以在多個並行運行的線程中使用同一個實例嗎?
要清楚,HashMap
實例是一個基類的成員,我將在其子類中調用後臺線程。那些線程將參考HashMap
對象。
如果線程只能從HashMap
讀取,那麼這是沒有問題的。至少有一個線程正在修改HashMap
而其他人可能正在同時讀取它,否則您將遇到麻煩。
Java確實有其他的Map
實現可以同時使用,比如java.util.concurrent.ConcurrentHashMap
。
也許從https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html添加「此實現不同步」引用。 –
@AndyTurner當線程只讀並不寫入'HashMap'時,它並不真正相關。 – Jesper
好吧,它有點。它表示,在結構上修改地圖並從多個線程讀取地圖時,需要進行同步。雖然這並沒有明確說明只讀時不需要同步,但我認爲這是缺席的暗示。 –
http://stackoverflow.com/questions/104184/is-it-safe-to-get-values-from-a-java-util-hashmap-from-multiple-threads-no-modi – mastov
if you'只從相同的字段讀取**可以安全地使用它 - 但請注意,多個線程可能會同時讀取相同的值。 – specializt
@mastov謝謝!沒有找到這個答案。 –