阻塞队列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)

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

维特丝(vetes)泡沫发蜡喷雾干胶定型弹力素羊毛卷男女保湿蓬松发胶 泡沫发蜡450ml+旅行装99ml
¥34.00
维特丝(vetes)一梳黑染发剂染发梳植物潮色显白遮盖白发自然清水纯黑发焗油男女梳炫彩 自然黑LW00
¥49.00
维特丝(vetes)染发笔遮白补染快速染发天然植物一次性染发棒 一次性染发棒黑色
¥46.00
维特丝 护发精油防毛躁清香玫瑰奇焕亮发干枯烫发卷发直发头发润发护发素男女士 滋养柔顺护发精油100ml
¥36.00