1.LinkedBlockingQueue<E>:java.util.concurrent
API中的解釋:
public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
一個基於已連結節點的、範圍任意的
blocking queue。此隊列按 FIFO(先進先出)排序元素。隊列的頭部 是在隊列中時間最長的元素。隊列的尾部 是在隊列中時間最短的元素。新元素插入到隊列的尾部,並且隊列檢索操作會獲得位於隊列頭部的元素。連結隊列的輸送量通常要高於基於數組的隊列,但是在大多數並發應用程式中,其可預知的效能要低。可選的容量範圍構造方法參數作為防止隊列過度擴充的一種方法。如果未指定容量,則它等於
Integer.MAX_VALUE。除非插入節點會使隊列超出容量,否則每次插入後會動態地建立連結節點。
適用阻塞隊列的好處:多線程操作共同的隊列時不需要額外的同步,另外就是隊列會自動平衡負載,即那邊(生產與消費兩邊)處理快了就會被阻塞掉,從而減少兩邊的處理速度差距。
2.ConcurrentLinkedQueue<E>:java.util.concurrent
API中的解釋:
public class ConcurrentLinkedQueue<E>extends AbstractQueue<E>implements Queue<E>, Serializable
一個基於連結節點的、無界的、安全執行緒的隊列。此隊列按照 FIFO(先進先出)原則對元素進行排序。隊列的頭部 是隊列中時間最長的元素。隊列的尾部 是隊列中時間最短的元素。新的元素插入到隊列的尾部,隊列檢索操作從隊列頭部獲得元素。當許多線程共用訪問一個公用 collection 時,ConcurrentLinkedQueue
是一個恰當的選擇。此隊列不允許 null 元素。
擴充:
並發編程中的一種編程方式是把任務拆分為一些的小任務,即Runnable,然後再提交給一個Executor執行,Executor.execute(Runnable).Executor在執行時適用內部的線程池完成操作。Executor在執行時使用內部的線程池完成操作。
建立線程池:
Executor executor = Executors.newFixedThreadPool(10); //建立固定數目線程的線程池
Executor executor = Executors.newCachedThreadPool(); //建立一個可快取的線程池,調用execute將重用以前構造的線程(如線程可用)。如果現有線程沒有可用的。則建立一個新的線程並添加到池中。
ExecutorService與生命週期
ExecutorService擴充了Executor並添加了一些生命週期管理的方法。一個Executor的生命週期有三種狀態,運行,關閉,終止。Executor建立時出於運行狀態。當調用ExecutorService.shutdown()後,出於關閉狀態,isShutdown方法返回true。這時,不應該再想Executor中新增工作,所有已添加的任務執行完畢後,Executor出於終止狀態,IsTerminated()返回true.如果Executor處於關閉狀態,往Executor提交任務會拋出unchecked
exception RejectedExecutionException.
API中的解釋:
public interface ExecutorService extends Executor
Executor 提供了管理終止的方法,以及可為跟蹤一個或多個非同步任務執行狀況而產生
Future 的方法。 可以關閉 ExecutorService,這將導致其停止接受新任務。關閉後,執行程式將最後終止,這時沒有任務在執行,也沒有任務在等待執行,並且無法提交新任務。通過建立並返回一個可用於取消執行和/或等待完成的
Future,方法 submit 擴充了基本方法
Executor.execute(java.lang.Runnable)。方法 invokeAny 和
invokeAll 是批量執行的最常用形式,它們執行任務集合,然後等待至少一個,或全部任務完成(可使用
ExecutorCompletionService 類來編寫這些方法的自訂變體)。Executors 類提供了用於此包中所提供的執行程式服務的Factory 方法。
void shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則調用沒有其他作用。
submit(Runnable task) 提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。