ArrayBlockingQueue - 它真的是并发的吗?

时间:2013-07-10 18:28:23

标签: java multithreading api concurrency blockingqueue

ArrayBlockingQueue的任何一个操作都不与其他任何操作并发;他们总是采取同样的锁。即使对于size()方法,也需要锁定。

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

对于LinkedBlockingQueue的实现,你有两个锁:put和take。 对于size(),它使用AtomicInteger,因此不需要锁定。

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

1 个答案:

答案 0 :(得分:7)

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

同时使用多种方法的能力该对象的用途。