Dan*_*Dan 8 java queue multithreading
我有一个消费者和一个生产者,它从队列中添加和删除Item对象.如果我使用put()
和take()
方法.我还需要涵盖哪些线程安全问题?这类似于有界缓冲区问题,我只是想知道是否使用阻塞队列代替信号量或监视器的需要.Item对象本身可能需要同步(setter但getter不需要锁定),我是对的吗?最后,我不太确定如何测试它是否是线程安全的,因为我不能同时让两个线程调用,take()
因为执行顺序是不确定的.有任何想法吗?谢谢.
对于您正在做的事情来说,它是完全线程安全的,事实上这就是它的设计目标.的描述BlockingQueue
(其是由实现的接口LinkedBlockingQueue
)规定:
BlockingQueue实现是线程安全的.所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果.