執行緒安全的集合

2021-10-03 20:52:02 字數 1043 閱讀 3242

#集合大概有4種型別:list   set   queue  map
其中vector、hashtable、properties是執行緒安全的。其中arraylist、linkedlist、hashset、treeset、hashmap、treemap等都是執行緒不安全的。(執行緒不安全是指:當多個執行緒訪問同乙個集合或map時,如果有超過乙個執行緒修改了arraylist集合,則程式必須手動保證該集合的同步性。)

#寫有鎖 讀無鎖的集合 加強版的讀寫分離 );
其實現的原理為 :

寫操作原理 :將底層的陣列做了一次複製,寫的是新陣列 完成了賦值之後再講新陣列替換舊陣列 每呼叫一次寫 底層陣列都會擴容一次 ,

讀操作原理 :讀的是寫操作完成之前的舊陣列 ,寫完成之後才能讀到新陣列的賦值。

#序  無下標 元素不允許重複
執行緒安全的set集合底層使用copyonwritearraylist實現,不同的是在使用addifabsent() 新增元素,會遍歷陣列 ,如果有存在的元素則不新增 。

其實現的原理為 :

表面上使用add方法,底層使用的是copyonwritearraylist的addifabsent() 來判斷要插入的新值是否存在

#   底層原理分兩種 1.7和1.8版本
1.7 版本:初始容量為16段(segment)為每個段加鎖 當多個物件存入同乙個段時 才需要互斥 使用方式與hashmap無異

其實現的原理: 原理:使用分段鎖 當多執行緒去訪問其中的乙個段時 如果是空值 直接賦上 ,如果有值 則去判斷key如果相同則覆蓋 不相同 則存在最後乙個值的next上面

1.8版本:通過ca原理:同步鎖鎖的是標頭物件
,拿到鎖的物件要先做節點遍歷,檢視有沒有相同的key值相同覆蓋 不同則掛在最後乙個節點上面的next上面

s交換演算法和同步演算法

執行緒安全的集合

工具類中提供了多個可以獲得執行緒安全集合的方法。synchronizedcollection collectionc synchronizedlist listlist synchronizedset sets synchronizedmap mapm synchronizedsortedset s...

集合 執行緒安全的HashMap

一 一般模式下執行緒安全的hashmap 預設情況常用的hashmap都是執行緒不安全的,在多執行緒的環境下使用,常常會造成不可預知的,莫名其妙的錯誤。那麼,我們如何實現乙個執行緒安全的hashmap呢?其中乙個可行的方式是使用collectons.synchronizedmap 方法來包裝我們的h...

C 執行緒安全的集合

表示物件的執行緒安全的無序集合。static void main string args thlist.trypeek out int result1 獲取末尾的值 console.writeline string.format count result thlist.count,result1 t...