1. 程式人生 > >隨筆41 LinkedBlockingQueue,PriorityQueue,ConcurrentLinkedQueue

隨筆41 LinkedBlockingQueue,PriorityQueue,ConcurrentLinkedQueue

-s con 自然 obj col 細節 oar 不同步 數組

1、LinkedBlockingQueue:基於鏈接節點的可選限定的blocking queue 。 這個隊列排列元素FIFO(先進先出)。 隊列的頭部是隊列中最長的元素。 隊列的尾部是隊列中最短時間的元素。 新元素插入隊列的尾部,隊列檢索操作獲取隊列頭部的元素。 鏈接隊列通常具有比基於陣列的隊列更高的吞吐量,但在大多數並發應用程序中的可預測性能較低。

blocking queue說明:不接受null元素;可能是容量有限的;實現被設計為主要用於生產者 - 消費者隊列;不支持任何類型的“關閉”或“關閉”操作,表示不再添加項目實現是線程安全的;

2、PriorityQueue 2.1、基於優先級堆的無限優先級queue 。 優先級隊列的元素根據它們的有序natural ordering ,或由一個Comparator在隊列構造的時候提供,這取決於所使用的構造方法。 優先隊列不允許null元素
。 依靠自然排序的優先級隊列也不允許插入不可比較的對象(這樣做可能導致ClassCastException )。
2.2、該隊列的頭部是相對於指定順序的最小元素。 如果多個元素被綁定到最小值,那麽頭就是這些元素之一 - 關系被任意破壞。 隊列檢索操作poll , remove , peek和element訪問在隊列的頭部的元件。 2.3、優先級隊列是無限制的,但是具有管理用於在隊列上存儲元素的數組的大小的內部容量 。 它始終至少與隊列大小一樣大。 當元素被添加到優先級隊列中時,其容量會自動增長。 沒有規定增長政策的細節。 2.4、該類及其叠代器實現Collection和Iterator接口的所有可選方法
。 方法iterator()中提供的叠代器不能保證以任何特定順序遍歷優先級隊列的元素。 如果需要有序遍歷,請考慮使用Arrays.sort(pq.toArray())
2.5、請註意,此實現不同步。 如果任何線程修改隊列,多線程不應同時訪問PriorityQueue實例。 而是使用線程安全的PriorityBlockingQueue類 實現註意事項:此實現提供了O(日誌(n))的時間入隊和出隊方法( offer , poll , remove()和add ); remove(Object)和contains(Object)方法的線性時間; 和恒定時間檢索方法( peek , element和size )。
3、ConcurrentLinkedQueue:基於鏈接節點的無界並發deque(deque是雙端隊列) 。 並發插入,刪除和訪問操作可以跨多個線程安全執行。 A ConcurrentLinkedDeque是許多線程將共享對公共集合的訪問的適當選擇。像大多數其他並發集合實現一樣,此類不允許使用null元素

隨筆41 LinkedBlockingQueue,PriorityQueue,ConcurrentLinkedQueue