• Java 数组阻塞队列 ArrayBlockingQueue


    参考

    描述

    由数组支持的有界blocking queue 。 此队列命令元素FIFO(先进先出)。 队列的头部是队列中最长时间的元素。 队列的尾部是队列中最短时间的元素。 在队列的尾部插入新元素,队列检索操作获取队列头部的元素。

    有些方法是继承的,所以一些方法在这个类 ArrayBlockingQueue 上面看不到。另外 add() 调用的 offer(),但是 offer() 不会报错,返回 null;remove() 调用的还是 poll(),但是 poll() 不会报错,返回 null。

    方式 抛出异常 有返回值,不抛出异常 阻塞等待 超时等待
    添加 boolean add(E e) boolean offer(E e) void put(E e) boolean offer(E e, long timeout, TimeUnit unit)
    删除 boolean remove() E poll() E take() E poll (long timeout, TimeUnit unit)
    检查头元素 E element() E peek()

    代码

    1. add/remove 如果满了/如果为空则抛出异常
    package thread;
    
    import java.util.concurrent.*;
    /**
     * @Author 夏秋初
     * @Date 2022/3/2 19:00
     */
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5);
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.add(String.valueOf(i)));
            }
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.remove());
            }
        }
    }
    
    
    
    1. offer/poll 如果满了/如果为空则返回null
    package thread;
    
    import java.util.concurrent.*;
    /**
     * @Author 夏秋初
     * @Date 2022/3/2 19:00
     */
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5);
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.offer(String.valueOf(i)));
            }
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.poll());
            }
        }
    }
    
    
    
    1. put/take 如果满了/如果为空则等待元素的插入/取出
    package thread;
    
    import java.util.concurrent.*;
    /**
     * @Author 夏秋初
     * @Date 2022/3/2 19:00
     */
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5);
            for (int i = 0; i < 5; i++) {
                arrayBlockingQueue.put(String.valueOf(i));
            }
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.take());
            }
        }
    }
    
    1. offer/poll 如果满了/如果为空则根据指定时间等待元素的插入/取出,超出结束
    package thread;
    
    import java.util.concurrent.*;
    /**
     * @Author 夏秋初
     * @Date 2022/3/2 19:00
     */
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5);
    //        for (int i = 0; i < 5; i++) {
    //            arrayBlockingQueue.offer(String.valueOf(i), 5, TimeUnit.SECONDS);
    //        }
            for (int i = 0; i < 5; i++) {
                System.out.println(arrayBlockingQueue.poll(5, TimeUnit.SECONDS));
            }
        }
    }
    
    
    1. element/peek 判断队列头是否有元素,有就返回/抛出异常
    package thread;
    
    import java.util.concurrent.*;
    /**
     * @Author 夏秋初
     * @Date 2022/3/2 19:00
     */
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5);
            for (int i = 0; i < 5; i++) {
                arrayBlockingQueue.offer(String.valueOf(i), 5, TimeUnit.SECONDS);
            }
    //        for (int i = 0; i < 5; i++) {
    //            System.out.println(arrayBlockingQueue.poll(5, TimeUnit.SECONDS));
    //        }
            System.out.println(arrayBlockingQueue.element());
            System.out.println(arrayBlockingQueue.peek());
        }
    }
    
  • 相关阅读:
    问题.NET--win7 IIS唯一密钥属性“VALUE”设置为“DEFAULT.ASPX”时,无法添加类型为“add”的重复集合
    java传统web项目添加maven管理jar包,log4j无法正常输出日志
    TortoiseSVN设置Beyond Compare为版本比较、差异合并工具
    Win10以管理员身份启动cmd.exe
    SprinMVC中文件上传只在内存保留一份拷贝
    maven项目运行报错invalid LOC header (bad signature)
    c#编写windows服务在开机是OnStart启动超时
    centos安装mysql
    CENTOS7配置静态IP
    @__CheckForDebuggerJustMyCode@4
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/15956694.html
Copyright © 2020-2023  润新知