concurrenthashmap concurrenthashmap get有鎖嗎
- 夕逆IT
- 前端設(shè)計(jì)
- 2023-08-13
- 278
老鐵們,大家好,相信還有很多朋友對于concurrenthashmap和get有鎖嗎的相關(guān)問題不太懂,沒關(guān)系,今天就由我來為大家分享分享concurrenthashma...
老鐵們,大家好,相信還有很多朋友對于concurrenthashmap和get有鎖嗎的相關(guān)問題不太懂,沒關(guān)系,今天就由我來為大家分享分享concurrenthashmap以及get有鎖嗎的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
怎么使用ConcurrentHashMap才能是線程安全的
ConcurrentHashMap只是保證本身map的線程安全,不保證你自己寫的程序的同步.你可以采用客戶端加鎖實(shí)現(xiàn)同步synchronized(test.chm)
concurrenthashmap1.8底層原理
1.8底層原理主要包括以下幾個方面:
2.CAS操作:ConcurrentHashMap使用CAS操作(CompareAndSwap)來實(shí)現(xiàn)線程安全,而不是像HashTable一樣使用synchronized關(guān)鍵字。在put操作時,首先會進(jìn)行一次判斷,如果當(dāng)前線程能夠獲取到鎖,則直接寫入數(shù)據(jù);如果獲取不到鎖,則采用CAS操作,嘗試多次重試,直到寫入成功為止。
3.數(shù)組+鏈表/紅黑樹:ConcurrentHashMap使用數(shù)組+鏈表/紅黑樹的數(shù)據(jù)結(jié)構(gòu)來存儲鍵值對,當(dāng)鏈表長度超過一定閾值(默認(rèn)為8)時,鏈表會轉(zhuǎn)化為紅黑樹,以提高查詢效率。
4.原子性操作:ConcurrentHashMap的put、get、remove等操作都是原子性的,不需要手動加鎖,可以保證線程安全。同時,ConcurrentHashMap還提供了一些原子性的操作方法,如putIfAbsent、replace等。
5.自動擴(kuò)容:ConcurrentHashMap的自動擴(kuò)容與HashTable類似,但是ConcurrentHashMap使用分段鎖設(shè)計(jì),可以對每個Segment獨(dú)立地進(jìn)行擴(kuò)容,不會對整個Map進(jìn)行鎖定,從而降低了鎖的競爭,提高了并發(fā)性能。
8底層原理主要包括以下幾個方面:
好了,文章到這里就結(jié)束啦,如果本次分享的concurrenthashmap和get有鎖嗎問題對您有所幫助,還望關(guān)注下本站哦!
本文鏈接:http://xinin56.com/qianduan/208.html