LinkedBlockingQueue与生产者 - 消费者场景中的许多生产者的线程安全性

时间:2014-02-10 12:39:18

标签: java concurrency race-condition producer-consumer blockingqueue

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

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

java的阻塞队列线程安全,适用于单个操作,例如take和put但不适用于多个操作的put或take操作,例如addAll不是原子地进行。

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