java.util.concurrent包,此包下的集合都不允許添加null元素
序號 | 接口 | 類 | 特性 | 適用場景 |
1 | Queue、Collection | ArrayBlockingQueue | 有界、阻塞、線程安全、FIFO | 生產者、消費者場景比較合適,並且支持FIFO |
2 | Queue | LinkedTransferQueue | 阻塞、線程安全、FIFO | LinkedTransferQueue實現了一個重要的接口TransferQueue,該接口含有下面幾個重要方法: |
3 | Queue | PriorityBlockingQueue | 阻塞、優先級 | 要使用FIFO,您需要插入一個新的FIFOEntry(anEntry),而不是普通的entry對象 |
4 | Queue | SynchronousQueue | 阻塞、FIFO、線程安全、同步隊列 | 只允許一個值添加、取出,無容量 |
5 | Queue | ConcurrentLinkedQueue | 線程安全、FIFO | 線程安全,但一邊遍歷一邊poll還是不行的 |
6 | Deque | ConcurrentLinkedDeque | 線程安全、鏈表 | 鏈表式操作,可對隊首隊尾直接操作 |
7 | Map | ConcurrentHashMap | 非阻塞、線程安全 | |
8 | Map | ConcurrentSkipListMap | 線程安全 | 構造函數支持排序,甚至可按照復合類型字段排序 |
9 | Map | ConcurrentSkipListSet | 線程安全 | 構造函數支持排序,甚至可按照復合類型字段排序 |
10 | List | CopyOnWriteArrayList | 線程安全 | 1、讀寫分離,讀和寫分開,需要讀和寫時都是對拷貝的副本進行操作。 |
11 | Set | CopyOnWriteArraySet | 線程安全 | 1、讀寫分離,讀和寫分開,需要讀和寫時都是對拷貝的副本進行操作。 2、不存儲重復對象 3、最終一致性 |
12 | Queue | DelayQueue | 阻塞、線程安全、FIFO | 某對象在getDelay方法返回0或者負數時,才能從take方法中獲取到值,否則一直阻塞 |
13 | Queue | LinkedBlockingQueue | 有界、阻塞、線程安全、FIFO、鏈表 | |
14 | Deque | LinkedBlockingDeque | 有界、阻塞、線程安全、FIFO、鏈表 |
Queue和Deque的區別
Deque不僅具有FIFO的Queue實現,也有FILO的實現,也就是不僅可以實現隊列,也可以實現一個堆棧。LinkedBlockingQueue和LinkedBlockingDeque的區別能比較好地體現Queue和Deque接口的區別。
參考網址:https://blog.csdn.net/vernonzheng/article/details/8267541
ArrayBlockingQueue和LinkedBlockingQueue的區別:
1. 隊列中鎖的實現不同
ArrayBlockingQueue實現的隊列中的鎖是沒有分離的,即生產和消費用的是同一個鎖;
LinkedBlockingQueue實現的隊列中的鎖是分離的,即生產用的是putLock,消費是takeLock
2. 在生產或消費時操作不同
ArrayBlockingQueue實現的隊列中在生產和消費的時候,是直接將枚舉對象插入或移除的;
LinkedBlockingQueue實現的隊列中在生產和消費的時候,需要把枚舉對象轉換為Node<E>進行插入或移除,會影響性能
3. 隊列大小初始化方式不同
ArrayBlockingQueue實現的隊列中必須指定隊列的大小;
LinkedBlockingQueue實現的隊列中可以不指定隊列的大小,但是默認是Integer.MAX_VALUE
參考網址:https://blog.csdn.net/ustc_zn/article/details/54864244