Concurrent包HashMap、HashTable、ConcurrentMap

ConcurrentMap:併發映射

HashMap

`  基於hash表進行存儲的映射。異步式線程不安全的映射—沒有同步鎖機制,多個線程訪問的時候會有數據不明確的問題。
`  雖然不安全,但是效率高。
`  底層以數組+鏈表結構存儲。
`  底層數組初始大小:16

HashTable

`  同步式線程安全的映射。對外提供的方法大部分都是同步方法。如果同步方法是非靜態,那麼鎖對象是this;如果同步方法是靜態方法,那麼鎖對象是當前類的字節碼。所以HashTable使用時是將整個映射進行鎖定,意思就是隻要有一個線程成功操作hashtable,那麼這麼線程就鎖定hashtable,其他的線程就不能鎖定了。
`  保證同步,保證線程安全,但是因爲鎖定的是整個映射,所以效率不高。比如多個線程都是.get()讀操作,效率很低。
`  底層以數組+鏈表結構存儲。
`  底層數組初始大小:11

ConcurrentHashMap

`  異步式線程安全的映射。JDK1.5開始,採取了分段鎖/分桶鎖。問題:程序時間空間開銷大,鎖需要上下文切換,線程調度等問題。所以從JDK1.8開始,採取CAS算法+紅黑樹結構,進行存儲和保證效率。
`  底層以數組+鏈表結構存儲。數組中的每個位置稱爲桶buckets,每個桶中維繫一個鏈表,鏈表中的每個節點存儲鍵、值、上個節點的地址、下個節點的地址。
`  底層數組初始大小:16

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章