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