我正在尝试Java中的多线程,这是我以前从未做过的事情。我目前正在尝试设计的宠物应用程序有一个阻塞队列和几个工作程序。该应用程序遵循以下规则:
应在以下情况下退出应用程序:
基本上,一旦所有消息都被消耗掉,并且系统中不再产生/显示任何消息,我将退出。该应用程序可以保证最终达到这一点。
现在我的问题是,我不确定在避免赛车条件的情况下,当上述条件为真时了解什么是最佳实践/设计。有帮助吗?
我目前正处于设计阶段,所以我没有代码向您显示,对此感到抱歉(我知道我的问题在当时很普通,请随时问我任何问题)。欢迎任何建议!
提前感谢!
一种方法是,每个工作人员在AtomicInteger启动时将1加1(表示它正在工作),然后在结束时减1。减去1后,如果AtomicInteger为0,则表示没有“活动”工作程序。
因此,当工作程序结束时,它将从atomicInteger中减去1,然后检查队列大小是否为零(没有等待消息)并且原子整数为零(没有活动的工作程序),则可以退出应用程序。