在我的應用程序中,我需要維護內存HashMap
,其中存儲着userIds
及其score
列表。我們是否需要同步java HashMap獲取是否只有一個寫入程序線程,並且沒有對地圖進行結構修改
有一個Writer線程根據業務邏輯更新用戶的得分。許多讀者主題閱讀該地圖的用戶score
,即map.get(userId)
。
userIds
的列表是靜態的,即沒有新用戶添加到地圖中。
按JavaDoc中If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally.
我不會做任何結構性變化(沒有添加/刪除)。我需要使用ConcurrentHashMap
還是其他Synchronization
這樣的用例呢?
沒有正確的同步,不能保證「讀」線程將讀取正確的值 – TheLostMind
是的,你應該。 – DejaVuSansMono
[Race condition](https://en.wikipedia.org/wiki/Race_condition)仍會發生,但不會發生ConcurrentModificationException。爲了研究良好的併發練習,我推薦這個資源:http://jcip.net/ –