我在查看“基于典型的生产者 - 消费者情景的使用示例”: http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html#put(E)
示例是否正确?
我认为在继续修改队列之前,put和take操作需要锁定某些资源,但这不会发生。
此外,如果这是一个并发类型的队列,由于并发队列上的原子操作不需要锁定,因此缺少锁定是可以理解的。
答案 0 :(得分:3)
我认为没有什么可以添加到api中写的内容:
一个队列,它还支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中的空间可用。
BlockingQueue实现是线程安全的。所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。
答案 1 :(得分:1)
BlockingQueue只是一个界面。此实现可以使用同步块,锁定或无锁。 AFAIK大多数方法都在实现中使用Lock。