阻塞队列4组api

阻塞队列4组api

方式 抛出异常 有返回值,不抛出异常 阻塞 等待 阻塞超时
添加 add offer() put() offer(e,long time,TimeUnit)
移除 remove poll() take() poll(long time,TimeUnit)
检测队首元素 element peek - -
package BlockingQueueA;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author liu
 */
public class Demo01 {
    public static void main(String[] args) throws InterruptedException {
        Test04();
    }

    /**
     * arrayBlockingQueue 队列抛出异常
     * add、element、remove
     */
    public static void Test01() {
        ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(BlockingQueue.add("a"));
        System.out.println(BlockingQueue.add("b"));
        System.out.println(BlockingQueue.add("c"));
        //检测队列首元素
        BlockingQueue.element();
        //IllegalStateException: Queue full
        //System.out.println(arrayBlockingQueue.add("d"));
        System.out.println("-----------------------------------");
        System.out.println(BlockingQueue.remove());
        System.out.println(BlockingQueue.remove());
        System.out.println(BlockingQueue.remove());
        //NoSuchElementException
        //System.out.println(arrayBlockingQueue.remove());
    }

    /**
     * arrayBlockingQueue 队列不抛出异常
     * offer、peek、poll
     */
    public static void Test02() {
        ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(BlockingQueue.offer("a"));
        System.out.println(BlockingQueue.offer("b"));
        System.out.println(BlockingQueue.offer("c"));
        //不报异常,返回boolean
        System.out.println(BlockingQueue.offer("d"));
        //检测队列首元素
        System.out.println(BlockingQueue.peek());
        System.out.println("-----------------------------------");
        System.out.println(BlockingQueue.poll());
        System.out.println(BlockingQueue.poll());
        System.out.println(BlockingQueue.poll());
        //不报异常,返回null
        System.out.println(BlockingQueue.poll());
    }

    /**
     * arrayBlockingQueue 队列一直阻塞
     * put、take
     */
    public static void Test03() throws InterruptedException {
        //队列大小:3
        ArrayBlockingQueue 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());

    }

    /**
     * arrayBlockingQueue 队列超时退出
     * put、take
     */
    public static void Test04() throws InterruptedException {
        ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);

        BlockingQueue.offer("a");
        BlockingQueue.offer("b");
        BlockingQueue.offer("c");
        //等待超时1秒就退出
        BlockingQueue.offer("d",1, TimeUnit.SECONDS);
        System.out.println("------------------------");
        System.out.println(BlockingQueue.poll());
        System.out.println(BlockingQueue.poll());
        System.out.println(BlockingQueue.poll());
        //等待超时1秒就退出
        BlockingQueue.poll(1,TimeUnit.SECONDS);
    }
}

posted @   小幼虫虫  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示