Java 具有最大持续时间的重复任务的ScheduledExecutorService

Java 具有最大持续时间的重复任务的ScheduledExecutorService,java,multithreading,timeout,scheduledexecutorservice,Java,Multithreading,Timeout,Scheduledexecutorservice,我有以下问题。我需要在一个单独的线程中同时重复执行多个任务。每个任务都有自己的重复率间隔。每个任务的执行不应超过最大持续时间(超时),这对于不同的任务是不同的。如果单个执行超过该持续时间,则需要重新启动。当前实现使用ScheduledThreadExecutor和scheduleAtFixedRate(…)方法。通过在执行任务逻辑的每个任务中创建一个新线程来观察超时情况,该线程在给定的持续时间内被joined,如果仍然活动,则中断。这不是内存效率,因为它有效地将每个任务的线程数增加了一倍:调度执

我有以下问题。我需要在一个单独的线程中同时重复执行多个任务。每个任务都有自己的重复率间隔。每个任务的执行不应超过最大持续时间(超时),这对于不同的任务是不同的。如果单个执行超过该持续时间,则需要重新启动。当前实现使用
ScheduledThreadExecutor
scheduleAtFixedRate(…)
方法。通过在执行任务逻辑的每个任务中创建一个新线程来观察超时情况,该线程在给定的持续时间内被
join
ed,如果仍然活动,则中断。这不是内存效率,因为它有效地将每个任务的线程数增加了一倍:调度执行器中的每个任务一个线程,每个任务中多一个线程来管理过期

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


你认为有更好的解决方案可以用来解决这个问题吗?

嗨,要不要试试和“”?Kunpapa,这不起作用,因为等待终止会等待所有任务完成或超时,但是在我的情况下,我有重复的任务需要以一定的速度重新启动,所以我不希望执行人被终止,它需要无限期地工作。只有单个执行在完成或超时后才会重复(重新启动)。作为后续(因为我必须完成我的工作),我实现了第二种方法的变体:我们简化了要求,以便所有任务的超时都相同。然后,在这个组件的主线程中,我为各种任务创建了一个ScheduledThreadExecutor,然后执行一段时间(在超时持续时间内)并有一个for循环,循环一次遍历所有未来,从映射中获取相应的任务,然后检查实际任务是否仍然卡住(它以纳秒为单位保留其开始时间戳)。然后,如果需要,取消并重新安排。您好,您想试试和吗“”?Kunpapa,这不起作用,因为等待终止会等待所有任务完成或超时,但是在我的情况下,我有重复的任务需要以一定的速率重新启动,因此我不希望执行器被终止,它需要无限期地工作。只会重复(重新启动)单个执行当他们完成或超时时。作为后续(因为我必须完成我的工作)我实现了第二种方法的一种变体:我们简化了需求,使所有任务的超时时间都相同。然后,在该组件的主线程中,我为各种任务创建了ScheduledThreadExecutor,然后执行一段睡眠时间(超时持续时间)还有一个for循环,循环一次遍历所有未来,从映射中获取相应的任务,然后检查实际任务是否仍然被卡住(它将开始时间戳保持为纳秒)。然后取消并重新安排(如果需要)。