多线程与锁(十六)之阻塞队列BlockQueue

该代码示例展示了如何在Java中使用ArrayBlockingQueue进行添加(add/offer/put)、移除(remove/poll/take)以及超时操作,包括队列满时的处理和队列空时的行为。
摘要由CSDN通过智能技术生成
/**
 * @author
 * @date 2023/1/1 9:44
 * 阻塞队列演示
 */
public class BlockingQueueDemo {

    public static void main(String[] args) throws InterruptedException {
        //第一组add 与 remove
        //testAddAndRemove();

        //第二组 offer 与 poll
        //testOfferAndPoll();

        //第三组 put 与 take
        //testPutAndTake();

        //第四组  offer 与 poll 设置超时时间
        testOfferAndPollTimeout();
    }

    public static void testAddAndRemove(){
        //创建阻塞队列
        ArrayBlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);

        //第一组add 与 remove
        //添加元素
        System.out.println(blockingQueue.add("a"));
        //System.out.println(blockingQueue.element());
        System.out.println(blockingQueue.add("b"));
        System.out.println(blockingQueue.add("c"));
        //System.out.println(blockingQueue.add("d"));//此时队列已满,会抛异常 IllegalStateException: Queue full

        //移除元素
        System.out.println(blockingQueue.remove());
        System.out.println(blockingQueue.remove());
        System.out.println(blockingQueue.remove());
        //System.out.println(blockingQueue.remove());//此时队列为空 也会抛异常 oSuchElementException
    }

    public static void testOfferAndPoll(){
        //创建阻塞队列
        ArrayBlockingQueue<String> 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.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());//队列为空 返回null
    }

    public static void testPutAndTake() throws InterruptedException {
        //创建阻塞队列
        ArrayBlockingQueue<String> 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());//队列为空  进入阻塞
    }

    public static void testOfferAndPollTimeout() throws InterruptedException {
        //创建阻塞队列
        ArrayBlockingQueue<String> 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",3L, TimeUnit.SECONDS));//超时之后 返回false

        //移除元素
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        //System.out.println(blockingQueue.poll(3L,TimeUnit.SECONDS));//超时之后 返回null
    }
}

 

方法类型抛出异常特殊值阻塞超时
插入add(e)offer(e)put(e)offer(e,time,unit)
移除remove()poll()take()poll(time,unit)
检查element()peek()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值