gpt4 book ai didi

java - 生产者-消费者:如何知道生产完成

转载 作者:行者123 更新时间:2023-11-29 09:19:30 26 4
gpt4 key购买 nike

我有以下情况:

  1. 从数据库中读取数据
  2. 做“计算”工作
  3. 将结果写入数据库

我有一个从数据库读取并将生成的对象放入 BlockingQueue 的线程。这些对象非常重,因此队列限制了内存中的对象数量。多个线程从队列中获取对象,执行工作并将结果放入第二个队列中。最后一个线程从第二个队列中获取结果并将结果保存到数据库中。

问题是如何防止死锁,例如。 “计算线程”需要知道什么时候不再有对象被放入队列。目前,我通过将线程(可调用)的引用传递给彼此并在轮询或报价之前检查 thread.isDone() 然后检查元素是否为空来实现此目的。我还检查了队列的大小,只要里面有元素,就一定要消费。使用 take 或 put 会导致死锁。

有没有更简单的方法来实现这一点?

最佳答案

完成的方法之一是当您确定没有更多任务将到达队列时,将“虚拟”或“有毒”消息作为队列中的最后一条消息。例如在放入之后与数据库查询的最后一行相关的消息。因此生产者将一条虚拟消息放入队列中,接收到该虚拟消息的消费者知道该批处理中不会再有任何有意义的工作。

关于java - 生产者-消费者:如何知道生产完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com