SynchronizedMap 一次鎖住整張表來保證線程安全,所以每次只能有一個線程來
訪為 map。
ConcurrentHashMap 使用分段鎖來保證在多線程下的性能。
ConcurrentHashMap 中則是一次鎖住一個桶。ConcurrentHashMap 默認將
hash 表分為 16 個桶,諸如 get,put,remove 等常用操作只鎖當前需要用到的桶。
這樣,原來只能一個線程進入,現在卻能同時有 16 個寫線程執行,並發性能的提
升是顯而易見的。
另外 ConcurrentHashMap 使用了一種不同的迭代方式。在這種迭代方式中,當
iterator 被創建后集合再發生改變就不再是拋出
ConcurrentModificationException,取而代之的是在改變時 new 新的數據從而
不影響原有的數據 ,iterator 完成后再將頭指針替換為新的數據 ,這樣 iterator
線程可以使用原來老的數據,而寫線程也可以並發的完成改變。