java - 使用 LinkedBlockingQueue 对多线程 java 程序足够好吗?

标签 java multithreading queue

我有一个消费者和一个生产者,它们从队列中添加和删除 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/

相关文章:

c# - 锁定问题 - 多线程使 LOOP 乱序

python - multiprocessinq.Queue 作为 Queue.Queue 子级的属性

Java和Cucumber如何复用多线程场景

c - 如何优化简单的循环/旋转缓冲区/FIFO 处理以提高性能

java - 使用 JNLP 启动 Applet 时找不到类异常

Java java 服务器页面和 netbeans

java - Kafka Streams 应用程序在 docker 容器中的奇怪行为

Python多线程使用队列 - 程序永远被阻塞

azure - 如何让 Azure Webjob 处理多个队列消息?

java - 添加额外的包以使用 Spring 配置扫描到实体管理器?