來自權威書籍:Java併發編程實戰;
同步容器類在執行每個操作期間都持有一個鎖。於HashMap不同,ConcurrentHashMap用了不同的枷鎖策越來提供更高的併發性和伸縮性。
ConcurrentHashMap並不是將每個方法都在同一個鎖上同步,並使得每次只能有一個線程訪問容器,而是用一種粒度更小的枷鎖機制來實現更大程度的共享,
這種機制成爲分段鎖(Lock Striping)。在這種機制中,任意數量的讀取線程可以併發的訪問Map,執行讀取操作的線程和執行寫入操作的線程可以併發的訪問Map,
並且一定數量的寫入線程可以併發的修改Map。ConcurrentHashMap帶來的記過是:在併發訪問環境下將實現更高的吞吐量,而在單線程環境中值損失非常小的性能。
總結:與Hashtable和synchronizedMap相比,有更多的優勢和更少的劣勢,只有當應用程序需要枷鎖Map進行獨佔的訪問的時候,才應該放棄使用ConcurrentHashMap