執行緒安全的集合

2022-01-18 09:24:53 字數 1335 閱讀 4773

工具類中提供了多個可以獲得執行緒安全集合的方法。

​ synchronizedcollection(collectionc)

​ synchronizedlist(listlist)

​ synchronizedset(sets)

​ synchronizedmap(mapm)

​ synchronizedsortedset(sortedsets)

​ synchoronizedsortedmap(sortedmapm)

有vector為什麼還要用copyonwritearraylist(區別)?

早期版本使用vector,但是因為其使用synchronized互斥鎖,導致效率太低,jdk1.5之後加入copyonwritearraylist,其只有寫加了鎖,讀不加鎖,所以寫寫互斥,讀讀不互斥。

使用方式與arraylist無異

執行緒安全的arraylist,加強版讀寫分離

寫有鎖,讀無鎖,讀寫之間不阻塞,優於讀寫鎖。

寫入時,先copy乙個容器副本,再新增新元素,最後替換引用。

listlist = new copyonwritearraylist();
執行緒安全的set,底層使用的是copyonwritearraylist實現。

唯一不同在於,使用addifabsent()新增元素,會遍歷陣列

​ 如果存在元素,則不新增(扔掉副本)。

setset = new copyonwritearrayset();
使用方式與hashmap無異。

初始容量預設為16段(segment),使用分段鎖設計。

不是對整個map加鎖,而是為每個segment加鎖。

當多個物件存入同乙個segment時,才需要互斥。

最理想狀態下為16個物件分別存入16個segment,並行數量為16。

理想情況下,支援最大併發16個執行緒。因為每乙個陣列是的乙個元素是上了鎖的,當hashcode計算到元素是存在陣列相同的位置時,競爭同一把鎖,執行緒安全,當不在同乙個位置時,沒有鎖,可以進行操作。

執行緒安全的集合

集合大概有4種型別 list set queue map其中vector hashtable properties是執行緒安全的。其中arraylist linkedlist hashset treeset hashmap treemap等都是執行緒不安全的。執行緒不安全是指 當多個執行緒訪問同乙個...

集合 執行緒安全的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...