交替忙碌等待

时间:2013-09-18 07:21:19

标签: java

在我的应用程序中,Jobs将动态提交,我需要跟踪已提交作业的完成情况。当我关闭我的应用程序时,我想等到所有提交的作业都完成。为此我保留了提交的工作ID列表。一旦引发了流程完成通知,我就会从列表中删除该ID。当调用shutdown时,我等待列表变空。

while (!ids.isEmpty());

这种忙碌的等待是否有更好的方法。

3 个答案:

答案 0 :(得分:1)

如果要通过创建和启动线程来实现作业调度和手动运行,则需要使用Object.waitObject.notify来实现条件变量。为了正确起来,这有点蠢糊......

但更好的方法是使用ThreadPoolExecutor服务来运行您的工作。这允许您提交所有作业,然后调用shutdownawaitTermination ...这将等到所有排队的作业都完成。

答案 1 :(得分:0)

你是在重新发明ExecutorService吗?特别是它的awaitTermination()方法?是的,awaitTermination()并不忙等待......

答案 2 :(得分:0)

你可以尝试反过来做: 每个作业调用一个“exit”-method(在保存id的类中),检查这是否是最后一个死亡过程。然后就没有忙等待循环了。为每个作业提供一个具有exit-method的“TerminationHandlerInterface”。