Java線程安全容器


一、Java同步容器

  同步容器是用來解決並發情況下的容器線程安全問題的。給多線程環境准備一個線程安全的容器對象。

  線程安全的容器對象: Vector, Hashtable。線程安全容器對象,都是使用synchronized方法實現的。

  concurrent包中的同步容器,大多數是使用系統底層技術實現的線程安全。類似native。Java8中使用CAS。

二、Map/Set

1,ConcurrentHashMap/ConcurrentHashSet

  底層哈希實現的同步Map(Set)。效率高,線程安全。使用系統底層技術實現線程安全。量級較synchronized低。key和value不能為null。

2,ConcurrentSkipListMap/ConcurrentSkipListSet

  底層跳表(SkipList)實現的同步Map(Set)。有序,效率比ConcurrentHashMap稍低。

三、List

1,CopyOnWriteArrayList

  寫時復制集合。寫入效率低,讀取效率高。每次寫入數據,都會創建一個新的底層數組。

四、Queue

1,ConcurrentLinkedQueue

  基礎鏈表同步隊列。

2,LinkedBlockingQueue

  阻塞隊列,隊列容量不足自動阻塞,隊列容量為0自動阻塞。

3,ArrayBlockingQueue

  底層數組實現的有界隊列。自動阻塞。根據調用API(add/put/offer)不同,有不同特性。

  當容量不足的時候,有阻塞能力。

  add方法在容量不足的時候,拋出異常。

  put方法在容量不足的時候,阻塞等待。

  單參數offer方法,不阻塞。容量不足的時候,返回false。當前新增數據操作放棄。

  三參數offer方法(offer(value,times,timeunit)),容量不足的時候,阻塞times時長(單位為timeunit),如果在阻塞時長內,有容量空閑,新增數據返回true。如果阻塞時長范圍內,無容量空閑,放棄新增數據,返回false。

4,DelayQueue

  延時隊列。根據比較機制,實現自定義處理順序的隊列。常用於定時任務。如:定時關機。

5,LinkedTransferQueue

  轉移隊列,使用transfer方法,實現數據的即時處理。沒有消費者,就阻塞。

6,SynchronusQueue

  同步隊列,是一個容量為0的隊列。是一個特殊的TransferQueue。

  必須現有消費線程等待,才能使用的隊列。

  add方法,無阻塞。若沒有消費線程阻塞等待數據,則拋出異常。

  put方法,有阻塞。若沒有消費線程阻塞等待數據,則阻塞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM