0

我正在查看“基于典型生产者-消费者场景的使用示例”:http: //download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html#put (E )

示例正确吗?

我认为 put 和 take 操作需要在继续修改队列之前锁定某些资源,但这不会发生在这里。

此外,如果这是一种并发队列,那么缺少锁是可以理解的,因为并发队列上的原子操作不需要锁。

4

2 回答 2

3

我认为没有什么可以添加到用 api 编写的内容中:

一个队列,它还支持在检索元素时等待队列变为非空,并在存储元素时等待队列中的空间变为可用的操作。

BlockingQueue 实现是线程安全的。所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。

于 2011-06-30T14:06:45.883 回答
1

BlockingQueue 只是一个接口。此实现可以使用同步块、锁定或无锁。AFAIK 大多数方法在实现中使用 Lock 。

于 2011-06-30T14:07:05.207 回答