LinkedBlockingQueue和ConcurrentLinkedQueue詳細用法

來源:互聯網
上載者:User

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。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.