1. 程式人生 > >Java線程安全容器

Java線程安全容器

link hashtable timeunit 操作 ria 消費者 阻塞隊列 當前 轉移

一、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方法,有阻塞。若沒有消費線程阻塞等待數據,則阻塞。

Java線程安全容器