1

我知道并发添加到 C++ 中的 stl 队列会导致问题,解决此问题的方法是在所有添加/删除调用周围添加互斥锁。

但我目前正在使用 Java 编程,并且正在使用 BlockingQueue。该文档仅说调用 BlockingQueue 对象上的 put/take 的线程被隐式阻塞,直到有空间可以放置/有一些东西可以分别使用。但是,它没有提到任何有关并发 put/take 调用的内容。我需要用互斥锁保护这些吗?

4

2 回答 2

1

不,阻塞队列是线程安全的。从文档

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

于 2011-07-25T06:03:55.120 回答
1

文档中:

BlockingQueue 实现是线程安全的。

因此,您不需要锁。

于 2011-07-25T06:04:15.653 回答