容器-併發(1)

HashMap ConcurrentHashMap HashTable synchronizedMap

1.HashMap與HashTable:
HashMap 非線程安全,支持null key 和null 值。 而HashTable線程安全,不支持null key和null 值。 HashMap 可以很容易轉換到LinkedHashMap(支持插入有序,設置,訪問,刪除有序,而TreeMap支持對Key有序,TreeMap實則爲紅黑樹), 而HashTable不能。

2.ConcurrentHashMap:
在併發環境下,ConcurrentHashMap弱化了size(), isEmpty()函數的語義,加強了get, put, containsKey, remove等操作的性能。即size, isEmpty返回的值可能已經過期,它實際上只是一個估計值,並不是一個精確值。雖然看上去這很不靠譜,但在併發環境下,這兩個方法的用處很小,因爲他們的返回值總在不斷變化。
使用ConcurrentHashMap的話,不要通過synchronize該對象來創建新的原子操作。因爲ConcurrentHashMap的加鎖粒度要小很多,並非是鎖整個對象,你把整個對象鎖住了,辛辛苦苦寫細粒度鎖的author會打死你的,想通過簡單的鎖整個對象來創建新的原子操作,可以瞭解一下Collections.synchronizedMap()。

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