java中常见的4种阻塞队列BlockingQueue

java中常见的4种阻塞队列BlockingQueueBlockingQueue,是java.util.

欢迎大家来到IT世界,在知识的湖畔探索吧!

BlockingQueue,java.util.concurrent 包提供的用于解决并发生产者 – 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且BlockingQueue提供了超时return null的机制,在许多生产场景里都可以看到这个工具的身影。

常见的4种阻塞队列

  1. ArrayBlockingQueue 由数组支持的有界队列。
  2. LinkedBlockingQueue 由链接节点支持的可选有界队列。
  3. PriorityBlockingQueue 由优先级堆支持的无界优先级队列。
  4. DelayQueue 由优先级堆支持的、基于时间的调度队列。

ArrayBlockingQueue

队列基于数组实现,容量大小在创建ArrayBlockingQueue对象时已定义好。数据结构如下图:

java中常见的4种阻塞队列BlockingQueue

队列创建:

BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>();

欢迎大家来到IT世界,在知识的湖畔探索吧!

应用场景:在线程池中有比较多的应用,生产者消费者场景。

工作原理:基于ReentrantLock保证线程安全,根据Condition实现队列满时的阻塞。

LinkedBlockingQueue

是一个基于链表的无界队列(理论上有界)

欢迎大家来到IT世界,在知识的湖畔探索吧!BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<>();

上面这段代码中,blockingQueue 的容量将设置为 Integer.MAX_VALUE

向无限队列添加元素的所有操作都将永远不会阻塞,因此它可以增长到非常大的容量。

使用无限 BlockingQueue 设计生产者 – 消费者模型时最重要的是 消费者应该能够像生产者向队列添加消息一样快地消费消息 。否则,内存可能会填满,然后就会得到一个 OutOfMemory 异常。

DelayQueue

由优先级堆支持的、基于时间的调度队列,内部基于无界队列PriorityQueue实现,而无界队列基于数组的扩容实现。

队列创建:

BlockingQueue<String> blockingQueue = new DelayQueue();

要求:入队的对象必须要实现Delayed接口,而Delayed集成自Comparable接口。

应用场景:电影票

工作原理:队列内部会根据时间优先级进行排序。延迟类线程池周期执行。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37095.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信