没有一个操作ArrayBlockingQueue与它的任何其他操作并发;他们总是拿同一个锁。即使对于该size()方法,它也需要锁定。
public int size() {
final ReentrantLock lock = this.lock;
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
而对于执行,LinkedBlockingQueue你有两个锁:put 和 take。并且因为size()它使用AtomicInteger所以不需要锁。
所以我的问题是:为什么并发包中的这个实现 -ArrayBlockingQueue真的是并发的?