我想澄清一些關於ConcurrentHashMap vs ConcurrentSkipListMap的API文檔。ConcurrentHashMap vs ConcurrentSkipListMap澄清
從我的理解ConcurrentHashMap gaurantees線程安全的多線程插入。所以如果你有一個只能被多個線程併發填充的地圖,那麼就沒有問題了。然而,API繼續建議它不保證檢索的鎖定,所以你可能會在這裏得到誤導結果?
相比之下,ConcurrentSkipListMap聲明:「插入,刪除,更新和訪問操作安全地由多個線程同時執行」。所以我認爲這沒有前面提到的哈希映射的檢索問題,但顯然這通常會帶來性能成本?
實際上,有沒有人發現需要使用ConcurrentSkipListMap是因爲這種特殊的行爲,或者一般來說沒有關係,檢索可能會提供過時的視圖?
如果您想要獲取最新的副本,那麼您通常會如何處理這個問題 - 有沒有辦法使用不同的數據結構,或者使用ConcurrentHashMap來處理阻塞? – Tranquility
實際上,在所有情況下'ConcurrentHashMap'就夠了。對我來說,更新意味着能夠看到完整的更新 - 而且它在'ConcurrentHashMap'中是如此。但是如果你想在put開始時立即阻止所有的地圖獲取,那麼你有一些額外的同步。您可以使用效率低下的Collections.synchronizedMap()或者具有相應關聯的ReadWriteLocks的嚴格大小的HashMap數組(像ConcurrentHashMap中的段)。請注意,這種阻塞幾乎總是不必要的,並會影響性能。真誠的我無法想象什麼時候你需要它。 – dezhik