java - LinkedBlockingQueue 在生产者-消费者场景中具有许多生产者的线程安全性

标签 java concurrency race-condition producer-consumer blockingqueue

我正在尝试在 Java 中模拟一种情况,其中许多生产者(至少 2 个)以固定速率访问同一个 LinkedBlockingQueue。他们生产、投入,然后重新开始。 我想知道这是否最终会导致那些试图同时获得队列写入访问权限的生产者之间出现竞争条件。 java.util.concurrent.BlockingQueue 的实现是否已设置为处理此类问题,或者我应该手动创建互斥体以避免此类问题?

感谢您的关注。

最佳答案

java 的阻塞队列对于单个操作(例如 take 和 put)来说是线程安全的,但对于 put 或 take 操作的多个操作来说不是线程安全的,例如 addAll 不是以原子方式执行的。

所以在你的情况下答案是否定的,你不应该自己处理线程安全,除非你希望生产者生产多种产品并将它们全部放在一个操作中。

关于java - LinkedBlockingQueue 在生产者-消费者场景中具有许多生产者的线程安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677479/

相关文章:

ios - 使用两个 TableView 时发生竞争条件并且应用程序崩溃

file - 如果 rsync 正在备份的文件在此过程中被更新,它会如何表现?

java - 发送记录并等待其确认接收

java - 整数除法 : Why is the result of 1/3 == 0?

c# - 什么情况下 ConcurrentBag.TryTake() 会失败?

c# - 序列化 XAML 的 ConcurrentBag

java - 并行深度优先搜索

java - 如何理解 Java 语言规范中的 volatile 示例?

java - 如何在 os x mavericks 中将端口 80 转发到 8080

java - 将列表添加到另一个列表