同步容器
線程安全的容器對象:Vector,Hashtable。線程安全容器對象,都是使用synchronized方法實現(xiàn)的。
concurrent包中的同步容器,大多數(shù)是使用系統(tǒng)底層技術(shù)實現(xiàn)的線程安全,類似native。java8中使用的CAS。CHECK AND SET
1.Map/Set
1.1ConcurrentHashMap/ConcurrentHashSet
底層哈希實現(xiàn)的同步Map(Set)。效率高,線程安全。使用系統(tǒng)底層技術(shù)實現(xiàn)線程安全。量級較synchronized低。Key和value不能為null
1.2ConcurrentSkipListMap/ConcurrentSkipListSet
底層使用跳表實現(xiàn)同步Map(Set)。有序,效率比ConcurrentHashMap稍低。
2.1CopyOnWriteList
寫時復(fù)制集合。寫入效率低,讀取效率高。每次寫入數(shù)據(jù),都會創(chuàng)建一個新的底層數(shù)組。讀取時每次都返回最新的數(shù)組。
3.Queue
3.1ConcurrentLinkedQueue
基礎(chǔ)鏈表同步隊列。
鏈表實現(xiàn)的--隊列 先入先出
offer() 加數(shù)據(jù)同add()
peek()查看Queue中的首數(shù)據(jù)
poll()獲取Queue中的首數(shù)據(jù) 取出并刪除
3.2LinkedBlockingQueue
阻塞隊列,隊列容量不足自動阻塞,隊列容量為0自動阻塞。
take 自動阻塞方法,隊列容量為0,自動阻塞
put 隊列容量不足自動阻塞
3.3ArrayBlockingQueue
底層數(shù)組實現(xiàn)的有界隊列。自動阻塞。根據(jù)調(diào)用API(add/put/offer)不同,有不同特性。
當(dāng)容量不足的時候,有阻塞能力。
add方法在容量不足的時候拋出異常
put方法在容量不足的時候,阻塞等待
單參數(shù)offer方法不阻塞,監(jiān)控容量,當(dāng)數(shù)據(jù)滿了會舍棄1234 長度是3 就存不進去,返回false
三參數(shù)offer方法 (offer(value,times,tiemunit)),容量不足的時候,阻塞times時長(單位為timeunit),如果在阻塞時長內(nèi),有容量空閑,新增數(shù)據(jù)返回true。如果阻塞時長范圍內(nèi),無容量空閑,放棄新增數(shù)據(jù),返回false。
3.4DelayQueue
延時隊列。根據(jù)比較機制,實現(xiàn)自定義處理順序的隊列。常用于定時任務(wù)。
如:定時關(guān)機。
比較大小,自動實現(xiàn)升序,建議和getDelay方法配合完成。如果在DelayQueue是需要按時完成的計劃任務(wù),必須配合getDelay方法完成。
需要實現(xiàn)compareTo方法進行比較
getDelay(TimeUnit):獲取計劃時長,根據(jù)TimeUnit來決定,如何返回結(jié)果值
TransferQueue 轉(zhuǎn)移隊列 無容量
3.5LinkedTransferQueue
轉(zhuǎn)移隊列,使用 transfer 方法,實現(xiàn)數(shù)據(jù)的即時處理。沒有消費者,就阻塞。
3.6SynchronusQueue
同步隊列,是一個容量為 0 的隊列。是一個特殊的 TransferQueue。
必須現(xiàn)有消費線程等待,才能使用的隊列。
add 方法,無阻塞。若沒有消費線程阻塞等待數(shù)據(jù),則拋出異常。
put 方法,有阻塞。若沒有消費線程阻塞等待數(shù)據(jù),則阻塞。

浙公網(wǎng)安備 33010602011771號