小熊回收站|-链表阻塞队列和数组阻塞队列的异同,Java并发编程

相同1、LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口;
2、LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的队列
内部都是使用ReentrantLock和Condition来保证生产和消费的同步;
当队列为空 , 消费者线程被阻塞;当队列装满 , 生产者线程被阻塞;
不同1、由上图可以看出 , 他们的锁机制不同
LinkedBlockingQueue中的锁是分离的 , 生产者的锁PutLock , 消费者的锁takeLock
而ArrayBlockingQueue生产者和消费者使用的是同一把锁;
2、他们的底层实现机制也不同
LinkedBlockingQueue内部维护的是一个链表结构
而ArrayBlockingQueue内部维护了一个数组
3、构造函数的区别
LinkedBlockingQueue有默认的容量大小为:Integer.MAX_VALUE , 当然也可以传入指定的容量大小
看其提供的构造方法就能知道
LinkedBlockingQueue执行clear方法时 , 会加上两把锁
LinkedBlockingQueue中使用了一个AtomicInteger对象来统计元素的个数
-----------------------------------------------------
【小熊回收站|-链表阻塞队列和数组阻塞队列的异同,Java并发编程】转载自: