ConcurrentLinkedQueue是一個基於連接節點的無界線程安全隊列,它採用先進先出的規則對節點進行排序,當咱們添加一個元素的時候,它會添加到隊列的尾部;當咱們獲取一個元素時,它會返回隊列頭部的元素。它採用了「wait-free」算法(即CAS算法)來實現。算法
ArrayBlockingQueue 經過 ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true);保證線程公平訪問隊列。數組
看下構造方法:緩存
public ArrayBlockingQueue(int capacity, boolean fair) { if (capacity <= 0) throw new IllegalArgumentException(); this.items = new Object[capacity]; lock = new ReentrantLock(fair); notEmpty = lock.newCondition(); notFull = lock.newCondition(); }
使用可重入鎖實現。安全
DelayQueue使用場景:框架
SynchronousQueue是一個不存儲元素的阻塞隊列。每個put操做必須等待一個take操做,不然不能繼續添加元素。
它支持公平訪問隊列。默認狀況下線程採用非公平性策略訪問隊列。
SynchronousQueue的吞吐量高於LinkedBlockingQueue和ArrayBlockingQueue。this
Fork/Join框架是Java 7提供的一個用於並行執行任務的框架,是一個把大任務分割成若干個小任務,最終彙總每一個小任務結果後獲得大任務結果的框架。spa
優勢:充分利用線程並行計算,減小線程間競爭。線程
缺點:在某些狀況下仍是存在競爭,好比雙端隊列裏只有一個任務時。而且該算法會消耗了更多的系統資源,好比建立多個線程和多個雙端隊列。設計
框架設計:code