java 阻塞队列小结

一世执手 提交于 2020-03-02 16:47:42

阻塞队列

说到队列,他有一个很显著的特点就是先进先出,由此利用这种特性,可以用来进行处理完成一些操作。阻塞队列就是其中之一
下面就是java中定义的接口

 * @since 1.5
 * @author Doug Lea
 * @param <E> the type of elements held in this collection
 */
public interface BlockingQueue<E> extends Queue<E> {

它的主要方法如下:
在这里插入图片描述

作用

它的作用概括起来就是

  • 添加到满时无法添加进行等待/ 报异常/ 返回是否成功
  • 获取到空时无法获取进行等待/ 报异常/ 返回是否成功
    就其实现之一的ArrayBlockingQueue而言

ArrayBlockingQueue

添加与删除时

public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> blankQueue = new ArrayBlockingQueue<>(5);
        blankQueue.take(); // 一直等待直到有值
        blankQueue.remove(); //java.util.NoSuchElementException
        blankQueue.poll(); // 取不到直接跳过
        blankQueue.poll(2,TimeUnit.SECONDS);//2 秒取不到直接跳过

        BlockingQueue<String> fullQueue = new ArrayBlockingQueue<>(5,false,Arrays.asList("1","2","3","4","5"));
        fullQueue.add("6"); //java.lang.IllegalStateException: Queue full
        fullQueue.offer("6");// 插不了直接跳过
        fullQueue.offer("6",2,TimeUnit.SECONDS); // 2秒内插不了直接跳过
        fullQueue.put("6");// 一直等待到可以插入
    }

其他的阻塞队列

  • LinkedBlockingQueue // 默认大小无限制 链表结构
  • SynchronousQueue // 只有一个元素
  • ArrayBlockingQueue // 自定义大小 数组结构
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • DelayQueue
  • PriorityBlockingQueue //优先级 元素可进行比较
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!