美文网首页
JAVA队列ArrayBolcokQueue

JAVA队列ArrayBolcokQueue

作者: 在岁月中远行 | 来源:发表于2023-02-16 01:23 被阅读0次

Queue的继承结构:

Queue接口就定义了几个常用的方法,Queue接口没有定义阻塞队列方法,而是在BlockQueue中定义的,所有实现该接口的类我们可以认为是阻塞队列(注意阻塞队列不是一定阻塞的,只是提供了阻塞的方法,也有非阻塞的方法可以使用)。例如BlockQueue中的offer方法就是阻塞的,BlockQueue中的offer方法就是非阻塞的。

队列通常以先进先出对元素进行排序,当然这是不一定的,也有优先级队列和后进先出。

今天我们来分析下阻塞队列之一的ArrayBolcokQueue,阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只能从容器里拿元素。

ArrayBolckQueue源码分析:

首先继承了AbstructQueue抽象类,然后再实现BlockQueue接口等。它是由数组支持的有界阻塞队列,这个队列对元素先进先出进行排序,容量一旦创建,就不能更改。

实现我们来看构造方法:

从构造方法来看,需要传入一个容量值,这个也就是后来内部数组的capacity值,默认是非公平锁。

当构造方法第二个参数传入true时,就是一个公平队列,默认情况下不保证访问者公平的访问队列,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列。 

put方法:

这里获得是一个可中断锁,可以看到当容量满时,notFull.await进行阻塞,插入数据会等待。否则的话就会调用enqueue方法入队列。

这里获得是一个可中断锁,可以看到当容量空时,notFull.await进行阻塞,取出数据会等待。否则的话就会调用dequeue方法出队列。

可以看到设定容量为4,在插入4的时候容量已经满了,5插入不进去,一直在等待。所以没有打印 已插入5这行代码。

再来测试一下offer非阻塞,可以发现4和5之间没有等待,说明没有阻塞,当然5肯定也是因为容量问题插入失败的了。所有ArrayBlockQueue不只有阻塞还有非阻塞。

offer(E e, long timeout, TimeUnit unit) 可以设定等待的时间,如果在指定的时间内,还不能往队列中加入BlockQueue,则返回false。

poll(long timeout, TimeUnit unit) 从BlockQueue取出一个队首的对象,如果在指定时间内,队列一旦有数据可取,则立即返回队列中的数据,否则直到时间超时还没有数据可取时,返回Null。

相关文章

  • JAVA队列ArrayBolcokQueue

    Queue的继承结构: Queue接口就定义了几个常用的方法,Queue接口没有定义阻塞队列方法,而是在Block...

  • 并发相关

    并发相关 JAVA高性能内存队列-disruptor JAVA内置队列 高性能内存队列-disruptor dis...

  • Java数组实现循环队列

    Java数组实现循环队列 上一节(Java实现队列——顺序队列、链式队列)我们使用数组实现了顺序队列,但是在tai...

  • 队列

    基于数组的循环队列 Java实现 基于链表的队列实现 Java实现

  • Java阻塞队列四组API介绍

    Java阻塞队列四组API介绍 通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及...

  • Java实现队列——顺序队列、链式队列

    Java实现队列——顺序队列、链式队列 概念 先进者先出,这就是典型的“队列”。(First In, First ...

  • ProiorityBlockingQueue

    优先级队列,线程安全队列。java output

  • 【二】优先队列和堆

    堆 ----待补充--- java中的优先队列 PriorityQueue为java中的优先队列((a,b)->b...

  • Java中常用七个阻塞队列的总结

    Java队列总结 通过前面文章的学习,我们对Java中常用队列做了介绍。本文,咱们来对队列做个总结吧。 首先,我们...

  • 数据结构 | 其三 栈和队列

    栈 java中栈继承了Vector 队列 2.1 普通队列 2.2 循环队列 2.3 优先级队列 2.4 阻塞队列...

网友评论

      本文标题:JAVA队列ArrayBolcokQueue

      本文链接:https://www.haomeiwen.com/subject/qbwukdtx.html