0

在我的应用程序中,作业将被动态提交,我需要跟踪提交作业的完成情况。当我关闭我的应用程序时,我想等到所有提交的作业完成。为此,我维护了一个提交的作业 ID 列表。一旦提出流程完成通知,我就会从列表中删除 id。当调用关闭时,我正在等待列表变为空。

while (!ids.isEmpty());

有没有更好的方法来解决这个忙碌的等待。

4

3 回答 3

1

如果您通过创建和启动线程来手动实现作业调度和运行,那么您需要使用Object.waitObject.notify实现条件变量。做对了有点繁琐...

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

于 2013-09-18T07:31:16.490 回答
0

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

于 2013-09-18T07:28:17.760 回答
0

您可以尝试反过来做:每个作业都调用一个“退出”方法(在保存 id 的类中)检查这是否是最后一个死去的进程。这样就不会出现忙等待循环。为每个作业提供具有退出方法的“TerminationHandlerInterface”。

于 2013-09-18T07:28:58.427 回答