【Java多線程】 阻塞隊列小結

阻塞隊列

說到隊列,他有一個很顯著的特點就是先進先出,由此利用這種特性,可以用來進行處理完成一些操作。阻塞隊列就是其中之一
下面就是java中定義的接口

 * @since 1.5
 * @author Doug Lea
 * @param <E> the type of elements held in this collection
 */
public interface BlockingQueue<E> extends Queue<E> {

它的主要方法如下:
在這裏插入圖片描述

作用

它的作用概括起來就是

  • 添加到滿時無法添加進行等待/ 報異常/ 返回是否成功
  • 獲取到空時無法獲取進行等待/ 報異常/ 返回是否成功
    就其實現之一的ArrayBlockingQueue而言

ArrayBlockingQueue

添加與刪除時

public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> blankQueue = new ArrayBlockingQueue<>(5);
        blankQueue.take(); // 一直等待直到有值
        blankQueue.remove(); //java.util.NoSuchElementException
        blankQueue.poll(); // 取不到直接跳過
        blankQueue.poll(2,TimeUnit.SECONDS);//2 秒取不到直接跳過

        BlockingQueue<String> fullQueue = new ArrayBlockingQueue<>(5,false,Arrays.asList("1","2","3","4","5"));
        fullQueue.add("6"); //java.lang.IllegalStateException: Queue full
        fullQueue.offer("6");// 插不了直接跳過
        fullQueue.offer("6",2,TimeUnit.SECONDS); // 2秒內插不了直接跳過
        fullQueue.put("6");// 一直等待到可以插入
    }

其他的阻塞隊列

  • LinkedBlockingQueue // 默認大小無限制 鏈表結構
  • SynchronousQueue // 只有一個元素
  • ArrayBlockingQueue // 自定義大小 數組結構
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • DelayQueue
  • PriorityBlockingQueue //優先級 元素可進行比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章