BlockingQueue需要同步吗?

时间:2015-02-05 19:08:27

标签: java

你可以帮帮我吗? 这是否是BlockingQueue的必要条件,当我想确定只有一个线程修改队列时?:

BlockingQueue queue = new ArrayBlockingQueue(1024);

集合= Collections.synchronizedCollection(队列); < ---这是必要的吗?

3 个答案:

答案 0 :(得分:1)

由于BlockingQueue是线程安全的,因此您无需同步其访问:并发由类本身处理。

BlockingQueue javadoc州:

  

BlockingQueue实现是线程安全的。

它还提供了一个生产者 - 消费者的例子。

答案 1 :(得分:0)

从文档中:“BlockingQueue实现是线程安全的。” http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html

答案 2 :(得分:0)

不,您不需要明确地synchronize

在内部,它使用ReentrantLock来保护访问权限,

    final ReentrantLock lock;
    /** Condition for waiting takes */
    private final Condition notEmpty;
    /** Condition for waiting puts */
    private final Condition notFull;

参见Source code 例如: -

public boolean offer(E e) {
        checkNotNull(e);
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            //
            //
        } finally {
            lock.unlock();
        }
    }
相关问题