map型
concurrenthashmap替代了hashmap,hashtable(無序)
concurrentskiplistmap替代了treemap(有序)
concurrenthashmap將hash表分成了16個segment,每個segment單獨進行鎖控制,從而減少了鎖的密度,提高了效能。
list型
copy on write容器,簡稱cow,寫時複製容器,在往容器中新增元素時,先將容器copy出乙個新容器,然後將元素新增到新容器中,再將原容器的引用指向新容器。併發讀的時候不需要鎖定容器,因為原容器沒有變化,使用的是一種讀寫分離的思想。由於每次更新都會複製新容器,所以如果資料量較大,並且更新操作頻繁會對記憶體消耗很高,建議在高併發讀的情況下使用。
copyonwritearraylist和copyonwritearrayset區別:
copyonwritearrayset是基於copyonwritearraylist實現的,其唯一的不同是add時呼叫的是copyonwritearraylist的addifabsent方法,addifabsent方法採用鎖保護,並建立乙個新的大小+1的object陣列。遍歷當前陣列,如果object陣列已有了當前元素,則直接返回,如果沒有,則放入object陣列尾部,並返回。從以上分析可見,copyonwriteset方法每次add時都要進行陣列的遍歷,因為其效能會低於copyonwritearraylist。
14 Java多執行緒 併發安全
三 如何做到執行緒安全?四 執行緒不安全引起的問題 4.2 活鎖 4.3 執行緒飢餓 五 效能和思考 六 鎖優化 七 單例模式 八 小結 4.1.1 死鎖的條件 條件描述 資源競爭 競爭資源一定大於1個,且小於競爭的執行緒數量 不可剝奪 獲得資源後不可剝奪,只能由執行緒自己釋放 資源獨佔 資源被執行...
多執行緒(六) 同步類容器和併發類容器
如古老的vector hashtable。這些容器的同步功能其實都是有jdk的collections.synchronized 等工廠方法去建立的。其底層的機制無非就是用傳統的synchronized關鍵字對每個公用的方法都進行同步,使得每次只能有乙個執行緒訪問容器的狀態。這很明顯不滿足我們今天網際...
同步類容器和併發類容器
同步類容器都是執行緒安全的,但是某些場景下可能需要加鎖來保護復合操作。復合類操作如 迭代 反覆訪問元素,遍歷完容器中所有的元素 跳轉 根據指定的順序找到當前元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodifica...