JUC Concurrent Programming BlockingQueue (10)

 Blocking queue

 Add remove

Four sets of API

the way Throw an exception No exception is thrown if there is a return value Blocking wait Timeout waiting
Add to add() offer() put() offer( , , )
Remove remove() poll() take() poll( , )
Judge the leader element element() peek()    

 

 

 

 

 

Throw an exception

//抛出异常
    public static  void test1(){
        //队列的大小
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.add("a"));//true
        System.out.println(blockingQueue.add("b"));//true
        System.out.println(blockingQueue.add("C"));//true

        System.out.println(blockingQueue.element());//查看队首元素
        System.out.println("-----------------------");
        //java.lang.IllegalStateException Queue full 抛出异常
//        System.out.println(blockingQueue.add("d"));
        System.out.println(blockingQueue.remove());//a
        System.out.println(blockingQueue.element());//查看队首元素
        System.out.println(blockingQueue.remove());//b
        System.out.println(blockingQueue.remove());//c

        //java.util.NoSuchElementException
//        System.out.println(blockingQueue.remove());

    }

 

No exception is thrown if there is a return value

//有返回值不抛出异常
    public static void test2(){
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.offer("a"));//true
        System.out.println(blockingQueue.offer("b"));//true
        System.out.println(blockingQueue.offer("c"));//true

        System.out.println(blockingQueue.peek());//查看队首元素

        System.out.println(blockingQueue.offer("d"));//false 不抛出异常
        System.out.println("==============");
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());//null 不抛出异常

    }

 

Blocking wait

//阻塞等待
    public static void test3() throws InterruptedException {
        ArrayBlockingQueue<Object> 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());//没有这个元素 一直阻塞
    }

Timeout waiting

//超时等待
    public static void test4() throws InterruptedException {
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.offer("a");
        blockingQueue.offer("b");
        blockingQueue.offer("c");
//        blockingQueue.offer("d",2, TimeUnit.SECONDS);//等待超过2秒就退出

        System.out.println("==================");
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println( blockingQueue.poll(2,TimeUnit.SECONDS));;//等待超过2秒就退出

 

 

Guess you like

Origin blog.csdn.net/weixin_45480785/article/details/105365119