BlockingQueue queue = new ArrayBlockingQueue(1024);
集合= Collections.synchronizedCollection(队列); < ---这是必要的吗?
答案 0 :(得分:1)
由于BlockingQueue
是线程安全的,因此您无需同步其访问:并发由类本身处理。
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();
}
}