JUC——阻塞队列四套API使用

9 篇文章 0 订阅

public class Test5 {

    //阻塞队列第一种方法:允许抛异常
    @Test
    public void test1() {
        //阻塞队列
        //构造器参数为阻塞队列最大长度
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);

        //1.1使用add方法,当添加的元素超过队列最大长度之后,如果继续添加,那么抛出异常IllegalStateException
        queue.add(1);
        queue.add(1);
        queue.add(1);
//        queue.add(1);

        //1.2使用remove,按照正常队列出队顺序移除元素,当没有元素能移除时报错,抛出NoSuchElementException异常
        queue.remove();
        queue.remove();
        queue.remove();
//        queue.remove();
    }

    //阻塞队列第二种方法,不抛异常,用返回值反馈
    @Test
    public void test2() {
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);

        //2.1使用offer方法,当添加数据操作索引长度返回false,否则返回true
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1));

        //2.2使用poll方法,当阻塞队列没有数据,返回空
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
    }

    //阻塞队列第三种方法,阻塞
    @Test
    public void test3() throws InterruptedException {
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);

        //3.1使用put方法添加数据,当数据满了之后,添加操作被阻塞,等到有空位了之后继续执行
        queue.put(1);
        queue.put(1);
        queue.put(1);
//        queue.put(1);

        //3.2使用take方法弹出数据,当队列空了之后,弹出操作被阻塞,等有了数据之后继续执行
        System.out.println(queue.take());
        System.out.println(queue.take());
        System.out.println(queue.take());
//        System.out.println(queue.take());
    }

    //阻塞队列第四种方法,不抛异常,用返回值反馈
    @Test
    public void test4() throws InterruptedException {
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);

        //4.1使用offer方法,第一个数据为添加的数据,第二个参数为最大阻塞时间大小,第三个为单位。当超过时间,直接返回false
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1));
        System.out.println(queue.offer(1,2, TimeUnit.SECONDS));

        //4.2使用poll方法,弹出队列第一个数据,第一个参数为最大阻塞时间,第二个为单位,当超出时间,直接返回null
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll(2,TimeUnit.SECONDS));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aristocrat l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值