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
浙公网安备 33010602011771号