JUC併發編程學習筆記-10-阻塞隊列BlockingQueue

視頻鏈接
在這裏插入圖片描述
在這裏插入圖片描述

1.拋出異常

import java.util.concurrent.ArrayBlockingQueue;

public class bqTest {
    public static void main(String[] args) {
        //list
        //set
        test1();
    }
    /*
    拋出異常
     */
    public static void test1(){
        //隊列的大小
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);

        System.out.println(blockingQueue.add("a"));
        System.out.println(blockingQueue.add("b"));
        System.out.println(blockingQueue.add("c"));
        //java.lang.IllegalStateException拋出異常
        //System.out.println(blockingQueue.add("d"));
        System.out.println(blockingQueue.element());//查看隊首元素是誰
        System.out.println(blockingQueue.remove());
        System.out.println(blockingQueue.remove());
        System.out.println(blockingQueue.remove());
        //java.util.NoSuchElementException沒有元素了
        //System.out.println(blockingQueue.remove());


    }
}

2.有返回值,沒有異常


import java.util.concurrent.ArrayBlockingQueue;

public class bqTest {
    public static void main(String[] args) {
        //list
        //set
        test2();
    }
/*
有返回值沒有異常
 */
    public static void test2(){
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.offer("a"));
        System.out.println(blockingQueue.offer("b"));
        System.out.println(blockingQueue.offer("c"));
        System.out.println(blockingQueue.offer("d"));//false,不拋出異常
        System.out.println("++++++++++++++++++++++++++++++++++++");
        System.out.println(blockingQueue.peek());//查看隊首元素是誰
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());//null  不拋出異常
    }
}

3.等待阻塞,一直


import java.util.concurrent.ArrayBlockingQueue;

public class bqTest {
    public static void main(String[] args) throws InterruptedException {
        //list
        //set
        test3();
    }
/*
等待,阻塞(一直)

 */
    public static void test3() throws InterruptedException {
        //隊列的大小
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        //一直阻塞
        blockingQueue.put("a");
        blockingQueue.put("b");
        blockingQueue.put("c");
        //隊列沒有位置了,一直等待
        //blockingQueue.put("d");


        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        //System.out.println(blockingQueue.take());//沒有這個元素,一直等待,阻塞
    }
    /*
等待,阻塞(等待超時)

 */
}

4.等待,阻塞(等待超時)


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

public class bqTest {
    public static void main(String[] args) throws InterruptedException {
        //list
        //set
        test3();
    }
    /*
等待,阻塞(等待超時)

 */
    public static void test3() throws InterruptedException {
        //隊列的大小
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);

        blockingQueue.offer("a");
        blockingQueue.offer("b");
        blockingQueue.offer("c");
        blockingQueue.offer("d",2, TimeUnit.SECONDS);//等待超過兩秒就退出

        System.out.println("===========");
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        blockingQueue.poll(2,TimeUnit.SECONDS);//超過兩秒就退出
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章