2021-06-14 阻塞队列的方法

本文通过四个方法(test1、test2、test3、test4)详细讲解了Java中ArrayBlockingQueue的使用,包括异常处理、阻塞操作、超时等待等特性。在test1中展示了当队列满时添加元素会抛出异常;test2中展示了offer方法如何在队列满时返回false而非抛出异常;test3和test4则演示了put和offer方法在队列为空时的阻塞和超时行为。

在这里插入图片描述

public class Test {
    public static void main(String[] args) throws InterruptedException {
      test4();
    }
    //抛出异常
    public static void test1(){
        //要写队列大小
        ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(arrayBlockingQueue.add("a"));
        System.out.println(arrayBlockingQueue.add("b"));
        System.out.println(arrayBlockingQueue.add("c"));
        System.out.println(arrayBlockingQueue.element());//查看队首元素
        System.out.println("-------------------------");

        //System.out.println(arrayBlockingQueue.add("d"));满的时候跑出异常
        System.out.println(arrayBlockingQueue.remove());
        System.out.println(arrayBlockingQueue.remove());
        System.out.println(arrayBlockingQueue.remove());

        //System.out.println(arrayBlockingQueue.remove()); 抛出异常
    }
    //不抛出异常
    public static void test2(){  //有返回值,没有异常
        ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(arrayBlockingQueue.offer("a"));
        System.out.println(arrayBlockingQueue.offer("b"));
        System.out.println(arrayBlockingQueue.offer("c"));
        System.out.println(arrayBlockingQueue.peek()); // 查看队首元素
        // System.out.println(arrayBlockingQueue.offer("d")); //满了返回false 不抛出异常!
        System.out.println("==================");
        System.out.println(arrayBlockingQueue.poll());
        System.out.println(arrayBlockingQueue.poll());
        System.out.println(arrayBlockingQueue.poll());
        //System.out.println(arrayBlockingQueue.poll()); 返回null 不抛出异常
    }
    //等待,阻塞(一直阻塞)
    public static void test3() throws InterruptedException {
        ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);

        arrayBlockingQueue.put("a");
        arrayBlockingQueue.put("b");
        arrayBlockingQueue.put("c");
        //arrayBlockingQueue.put("d"); 满了,一直阻塞

        System.out.println(arrayBlockingQueue.take());
        System.out.println(arrayBlockingQueue.take());
        System.out.println(arrayBlockingQueue.take());
        //System.out.println(arrayBlockingQueue.take()); 空了,一直阻塞


    }

    //等待,阻塞(等待超时)
      public static void test4() throws InterruptedException {
          ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);

          System.out.println(arrayBlockingQueue.offer("a"));
          System.out.println(arrayBlockingQueue.offer("b"));
          System.out.println(arrayBlockingQueue.offer("c"));
          //System.out.println(arrayBlockingQueue.offer("d",2, TimeUnit.SECONDS)); 满了,等待2秒后退出
          System.out.println("=======================");
          System.out.println(arrayBlockingQueue.poll());
          System.out.println(arrayBlockingQueue.poll());
          System.out.println(arrayBlockingQueue.poll());
         // System.out.println(arrayBlockingQueue.poll(2,TimeUnit.SECONDS));空了,等待2秒后退出
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值