阻塞队列LinkedBlockingQueue和ArrayBlockingQueue的异同

相同:

1、都实现了BlockingQueue接口,都是可阻塞的队列。
2、内部都是使用ReentrantLock和Condition来保证生产和消费的同步。
3、当队列为空,消费者线程被阻塞;当队列装满,生产者线程被阻塞。
4、使用Condition的方法来同步和通信:await()和signal()。

不同:

1、锁机制不同
LinkedBlockingQueue中的锁是分离的,生产者的锁putLock,消费者的锁takeLock。
ArrayBlockingQueue生产者和消费者使用的都是同一把锁。

2、他们的底层实现机制不同
LinkedBlockingQueue内部维护的是一个链表。
ArrayBlockingQueue内部维护的是一个数组。

3、构造时候的区别
LinkedBlockingQueue有默认的容量大小为:Integer.MAX_VALUE,当然也可以传入指定的容量大小。
ArrayBlockingQueue在初始化的时候,必须传入一个容量大小的值。

方法区别:

抛异常 返回true或false 阻塞 带时间的阻塞
插入 add(o) offer(o) put(o) offer(o,timeout,timeunit)
移除 remove(o) poll() take() poll(timeout,timeunit)

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍