如何理解您的应用程序是否已在Java的多线程消费者生产者方案中完成计算

问题描述 投票:0回答:1

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

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

应在以下情况下退出应用程序:

  • 队列上没有更多消息
  • 所有工作人员都被阻止并等待消息被使用

基本上,一旦所有消息都被消耗掉,并且系统中不再产生/显示任何消息,我将退出。该应用程序可以保证最终达到这一点。

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

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

提前感谢!

java multithreading queue producer-consumer
1个回答
1
投票

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

因此,当工作程序结束时,它将从atomicInteger中减去1,然后检查队列大小是否为零(没有等待消息)并且原子整数为零(没有活动的工作程序),则可以退出应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.