ScheduledExecutorService包含具有最长持续时间的重复任务

时间:2017-10-18 15:45:32

标签: java multithreading timeout scheduledexecutorservice

我有以下问题。我需要同时和重复执行多个任务,每个任务都在一个单独的线程中。每个任务都有自己的重复率间隔。每个任务执行应该不超过最大持续时间(超时),这对于不同的任务是不同的。如果单次执行超过该持续时间,则需要重新启动。当前实现使用ScheduledThreadExecutorscheduleAtFixedRate(...)方法。通过在执行任务逻辑的每个任务中创建新线程来观察超时条件,并且线程在给定持续时间内被join编辑,然后如果仍然存活则被中断。这不是内存效率,因为它有效地使每个任务的线程数增加一倍:一个用于计划执行程序中的每个任务,另一个用于管理到期期间的每个任务。

我的另一个想法是利用管理线程不断迭代任务(执行程序返回的ScheduledFuture实例)并检查当前执行持续时间,然后在需要时取消它们并重新安排。这种方法的问题是ScheduledFuture不能保持当前执行所花费的时间。我可以维护一个Map<Future, MyTask>并将执行持续时间存储在MyTask类中,但它已经开始看起来有点太多了。

您是否认为我可以使用更好的解决方案来解决这一特定问题?

0 个答案:

没有答案