BlockingQueue的四组API

BlockingQueue的四组API

  • 会抛出异常

    public class Test01 {
        public static void main(String[] args) {
            test();
        }
        public static void test() {
            //队列的大小:3
            ArrayBlockingQueue<Object> 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());
    
            /*队列大小只有3
            java.util.NoSuchElementException  抛出异常
            System.out.println(blockingQueue.remove());*/
        }
    }
    
  • 有返回值 不会抛出异常

    public class Test01 {
        public static void main(String[] args) {
            test();
        }
        public static void test() {
            //队列的大小:3
            ArrayBlockingQueue<Object> 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("队首是"+blockingQueue.peek());//检测队首元素 不会抛出异常
            System.out.println(blockingQueue.poll());
            System.out.println(blockingQueue.poll());
            System.out.println(blockingQueue.poll());
            // System.out.println(blockingQueue.poll());   //null 多删除也不抛出异常:
        }
    }
    
  • 等待 阻塞

    public static void main(String[] args) throws InterruptedException {
        test();
    }
    public static void test() throws InterruptedException {
        //队列的大小:3
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.put("a");
        blockingQueue.put("b");
        blockingQueue.put("c");
        /*队列没有位置 d 会一值等待
        blockingQueue.put("d");   */
    
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
       /* 没有元素 会一直等待
        System.out.println(blockingQueue.take());*/
    }
    
  • 超时等待 自动退出

    public class Test01 {
        public static void main(String[] args) throws InterruptedException {
            test();
        }
        public static void test() throws InterruptedException {
            //队列的大小:3
            ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
           blockingQueue.offer("a");
           blockingQueue.offer("b");
           blockingQueue.offer("c");
           // blockingQueue.offer("d",2, TimeUnit.SECONDS);  //等待超过两秒后 就退出
    
            System.out.println(blockingQueue.poll());
            System.out.println(blockingQueue.poll());
            System.out.println(blockingQueue.poll());
            blockingQueue.poll(2,TimeUnit.SECONDS);  //等待超过两秒后 就退出
        }
    }
    
方式 抛出异常 有返回值,不抛出异常 阻塞等待 超时等待
添加 add offer put offer(,,)
移除 remove poll take poll(,)
查看队列首位元素 element peek
posted @ 2021-05-04 11:49  saxon宋  阅读(81)  评论(0)    收藏  举报