我正在尝试在 Java 中模拟一种情况,其中许多生产者(至少 2 个)以固定速率访问同一个 LinkedBlockingQueue。他们生产、投入,然后重新开始。 我想知道这是否最终会导致那些试图同时获得队列写入访问权限的生产者之间出现竞争条件。 java.util.concurrent.BlockingQueue 的实现是否已设置为处理此类问题,或者我应该手动创建互斥体以避免此类问题?
感谢您的关注。
最佳答案
java 的阻塞队列对于单个操作(例如 take 和 put)来说是线程安全的,但对于 put 或 take 操作的多个操作来说不是线程安全的,例如 addAll 不是以原子方式执行的。
所以在你的情况下答案是否定的,你不应该自己处理线程安全,除非你希望生产者生产多种产品并将它们全部放在一个操作中。
关于java - LinkedBlockingQueue 在生产者-消费者场景中具有许多生产者的线程安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677479/