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包中,因为多个线程可以同时使用该对象而没有线程安全问题。

不能同时使用多种方法不是对象的目的。

07-26 05:04