java - Java 中 BlockingQueue 上的并发 put 调用

标签 java concurrency blockingqueue

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

但我现在正在用 Java 编程,并且正在使用 BlockingQueue。文档只说对 BlockingQueue 对象调用 put/take 的线程会被隐式阻塞,直到有空间可以放置/有东西可以分别取出。但是,它没有提及任何有关并发 put/take 调用的内容。我需要用互斥锁来保护它们吗?

最佳答案

不,阻塞队列是线程安全的。来自 the docs :

BlockingQueue implementations are thread-safe. All queuing methods achieve their effects atomically using internal locks or other forms of concurrency control

关于java - Java 中 BlockingQueue 上的并发 put 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812231/

相关文章:

java - 生产者消费者场景,停止从队列中读取直到执行完成

java - Projections.distinct(Projections.count ("objectId")) 和 Projections.countDistinct ("objectId") 有什么区别

java - 我正在使用的库正在打开输入流而不是关闭它。我怎样才能关闭它?

java - "less predictable performance of LinkedBlockingQueue in concurrent applications"是什么意思?

java - 使用 BlockingQueue 和多线程。所有线程都陷入等待状态

java - 什么时候在 ThreadPoolExecutor 中指定单独的核心和最大池大小是个好主意?

java - 并发包中的阻塞队列方法;

java - WAS 中间歇性发生 SSL 证书链接错误

java - 在 Java 中检索矩阵的当前比例值

.net - 不可变对象(immutable对象)的线程安全性如何?