Java提供的線程安全的Queue可以分為阻塞隊列和非阻塞隊列,其中阻塞隊列的典型例子是BlockingQueue,非阻塞隊列的典型例子是ConcurrentLinkedQueue
BlockingQueue是一個接口, 繼承Queue接口,Queue接口繼承 Collection
BlockingQueue的方法
其中add 和remove方法會拋出異常,一般使用后面兩組方法
BlockingQueue的實現類
ArrayBlockingQueue
DelayQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
ArrayBlockingQueue:由數組實現的有界阻塞隊列,其中元素以FIFO(先入先出)順序排序,其構造函數必須帶一個int參數來指明其大小,可選參數fair(布爾)決定在多線程搶占時是否使用公平鎖
LinkedBlockingQueue:由鏈表實現的阻塞隊列,其中元素以FIFO(先入先出)順序排序,若其構造函數帶一個規定大小的參數,生成的BlockingQueue有大小限制,若不帶大小參數,所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定
PriorityBlockingQueue:無界的阻塞隊列,其所含對象的排序不是FIFO而是依據對象的自然排序順序或者是構造函數的Comparator決定的順序
SynchronousQueue:特殊的BlockingQueue,對其的操作必須是放和取交替完成的