gpt4 book ai didi

java - 如何在 Java 多线程消费者-生产者场景中了解应用程序是否已完成计算

转载 作者:行者123 更新时间:2023-12-02 08:58:30 25 4
gpt4 key购买 nike

我正在尝试使用 java 进行多线程处理,这是我以前从未做过的事情。我目前正在尝试设计的宠物应用程序有一个阻塞队列和多个工作线程。该应用程序遵循以下规则:

  • 工作人员在队列中等待消息
  • 当工作线程从队列中获取消息时,它会对其进行处理,并可能生成更多消息并添加回队列。
  • 某些消息不会生成更多消息。
  • 应用程序启动时队列中有几条消息。
  • 1 个工作线程 = 1 个线程

如果出现以下情况,应用程序应该退出:

  • 队列中没有更多消息
  • 所有工作线程都被阻塞并等待消息被消耗

基本上,一旦所有消息都被消耗并且系统中不再生成/存在更多消息,我就应该退出。该应用程序保证最终会达到这一点。

现在我的问题是,我不确定当上述条件成立时避免赛车条件的最佳实践/设计是什么。有什么帮助吗?

我目前处于设计阶段,所以我没有代码可以向您展示,对此感到抱歉(我知道我此时的问题非常通用,所以请随时问我任何问题)。欢迎任何建议!

提前致谢!

最佳答案

一种方法是每个工作进程在启动时将 AtomicInteger 加 1(表示它正在工作),然后在结束时减 1。减 1 后,如果 AtomicInteger 为 0,则意味着没有“活跃”worker。

所以当一个worker结束时,它会从atomicInteger中减去1,然后检查如果队列大小为零(没有等待消息)并且原子整数为零(没有 Activity worker),则可以退出应用程序。

关于java - 如何在 Java 多线程消费者-生产者场景中了解应用程序是否已完成计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60339109/

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