1

没有一个操作ArrayBlockingQueue与它的任何其他操作并发;他们总是拿同一个锁。即使对于该size()方法,它也需要锁定。

 public int size() {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            return count;
        } finally {
            lock.unlock();
        }
    }

而对于执行,LinkedBlockingQueue你有两个锁:put 和 take。并且因为size()它使用AtomicInteger所以不需要锁。

所以我的问题是:为什么并发包中的这个实现 -ArrayBlockingQueue真的是并发的?

4

1 回答 1

7

ArrayBlockingQueue是在java.util.concurrent包中,因为多个线程可以同时使用该对象而不会出现线程安全问题。

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

于 2013-07-10T18:30:44.747 回答