我有一个消费者和一个生产者,它们从队列中添加和删除 Item 对象。如果我使用 put()
和 take()
方法。我还需要解决任何线程安全问题吗?这类似于有界缓冲区问题,我只是想知道是否使用阻塞队列来代替对信号量或监视器的需求。 Item 对象本身可能需要同步(setter 但 getter 不需要锁),对吗?最后,我不太确定如何测试它是否是线程安全的,因为我不能同时让两个线程调用 take()
因为执行顺序是不确定的。有任何想法吗?谢谢。
最佳答案
对于您正在做的事情,它是完全线程安全的,事实上这就是它的设计目的。 BlockingQueue
的说明(这是 LinkedBlockingQueue
实现的接口(interface))状态:
BlockingQueue implementations are thread-safe. All queuing methods achieve their effects atomically using internal locks or other forms of concurrency control.
关于java - 使用 LinkedBlockingQueue 对多线程 java 程序足够好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12595900/