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 @ 2022-03-08 08:58  小皮睡不醒  阅读(113)  评论(0)    收藏  举报