哪个 Java 阻塞队列最适合多生产者和单个或多个消费者场景?
我正在使用 LinkedBlockingQueue 进行测试,但出现 OutOfMemoryError 异常。
我正在努力实现以下目标。
- 生产者创建一个对象并放入队列中。
- 消费者从队列中抓取数据并插入数据库。会有 400 个生产者,我可以根据需要调整消费者。
如果有任何想法,请告诉我。
更新
Producer : 它应该监听 Server Socket。它从套接字读取数据并构造对象(域对象)并放入队列中。
消费者:从队列中取出对象并插入数据库(支持 Hiberante 和连接池)
这是我的真实环境。流程应该能够处理至少 200 条记录/秒。我正在测试流程的可扩展性以及如何改进它。我希望这会提供更好的想法。
有用的链接:
最佳答案
问题不在于您使用哪个 Queue
实现,而是如何解决限制生产者的问题如果您的消费者跟不上 .一种可能的解决方案是创建一个具有固定容量的 LinkedBlockingQueue
,并让您的生产者调用 offer(E e)
,如果出现以下情况,它将返回 false
队列已满。
另一种可能的解决方案是相应地调整生产者和消费者的数量。
关于java - 哪个 Java 阻塞队列最适合多生产者和单个或多个消费者场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243733/