在我的应用程序中,Jobs将动态提交,我需要跟踪已提交作业的完成情况。当我关闭我的应用程序时,我想等到所有提交的作业都完成。为此我保留了提交的工作ID列表。一旦引发了流程完成通知,我就会从列表中删除该ID。当调用shutdown时,我等待列表变空。
while (!ids.isEmpty());
这种忙碌的等待是否有更好的方法。
答案 0 :(得分:1)
如果要通过创建和启动线程来实现作业调度和手动运行,则需要使用Object.wait
和Object.notify
来实现条件变量。为了正确起来,这有点蠢糊......
但更好的方法是使用ThreadPoolExecutor
服务来运行您的工作。这允许您提交所有作业,然后调用shutdown
和awaitTermination
...这将等到所有排队的作业都完成。
答案 1 :(得分:0)
你是在重新发明ExecutorService
吗?特别是它的awaitTermination()
方法?是的,awaitTermination()
并不忙等待......
答案 2 :(得分:0)
你可以尝试反过来做: 每个作业调用一个“exit”-method(在保存id的类中),检查这是否是最后一个死亡过程。然后就没有忙等待循环了。为每个作业提供一个具有exit-method的“TerminationHandlerInterface”。