ArrayBlockingQueue和LinkedBlockingQueue的简单理解(线程池拓展)

ArrayBlockingQueue和LinkedBlockingQueue都是BlockingQueue的实现,前者是数组实现,后者是链表实现。

相同点:都是通过reentrantlock和condition实现生产者和消费者,队列空时,消费者队列阻塞,队列满时,生产者队列阻塞。

不同点:1.ArrayBlockingQueue put和take使用同一把锁,而LinkedBlockingQueue两把。

    2.ArrayBlockingQueue是使用定长的数组维护,在初始化时需设定一个足够大的数,而LinkedBlockingQueue不需要,最长到达Integer.MAX_VALUE时OOM,且结点多时GC很慢。

    3.ArrayBlockingQueue增删使用的环装链表下标,不会开辟新的内存空间,LinkedBlockingQueue每次使用时增删实例结点。

标题:《LinkedBlockingQueue和ArrayBlockingQueue的异同》 作者:练子 链接:https://www.cnblogs.com/lianliang/p/5765349.html

 

ArrayBlockingQueue中各方法源码可以参考:标题:《java阻塞队列之ArrayBlockingQueue》 作者:北漂程序员 链接:https://www.cnblogs.com/teach/p/10665199.html

标题:《【细谈Java并发】谈谈LinkedBlockingQueue》 作者:颤抖吧腿子 https://blog.csdn.net/tonywu1992/article/details/83419448

posted @   小皮睡不醒  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示