使用LinkedBlockingQueue足够多线程java程序?

时间:2012-09-26 06:38:43

标签: java multithreading queue

我有一个消费者和一个生产者,可以从队列中添加和删除Item对象。如果我使用put()take()方法。我还需要涵盖哪些线程安全问题?这类似于有界缓冲区问题,我只是想知道是否使用阻塞队列代替信号量或监视器的需要。 Item对象本身可能需要同步(setter但getter不需要锁定),我是对的吗?最后,我不太确定如何测试它是否是线程安全的,因为我不能同时使两个线程都调用take(),因为执行顺序是不确定的。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:7)

对于您正在做的事情来说,它是完全线程安全的,事实上这就是它的设计目标。 BlockingQueue(由LinkedBlockingQueue实现的接口)的描述说明:

  

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

答案 1 :(得分:1)

同时put()和take() 线程安全,因为它们使用2个不同的锁。

这已经在这里得到解答:Are LinkedBlockingQueue's insert and remove methods thread safe?