ArrayBlockingQueue
的任何单个操作都不能与其任何其他操作并发;他们总是使用相同的锁。即使对于size()
方法,它也需要锁定。
public int size() {
final ReentrantLock lock = this.lock;
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
对于
LinkedBlockingQueue
的实现,您有两个锁:放置和获取。对于
size()
,它使用AtomicInteger
,因此不需要锁。所以我的问题是:为什么在并发包中实现此方法-
ArrayBlockingQueue
是否真正并发? 最佳答案
ArrayBlockingQueue
位于java.util.concurrent
包中,因为多个线程可以同时使用该对象而没有线程安全问题。
不能同时使用多种方法不是对象的目的。