问题:
我有一个任务,必须在每个任务运行后以固定的延迟定期运行。此外,我有一个条件,在初始延迟或第一次执行应在条件满足后发生。因此执行程序必须阻止调度任务,直到条件满足为止。
Java Concurrent包为我们提供了ScheduledThreadPoolExecutor,它具有初始延迟时间的选项。但在我的情况下,初始延迟是在一些条件或值改变到所需的条件之后。
我如何实现此行为以及我应该使用哪些executorservice或者我可以覆盖执行程序服务中的哪些方法来实现上述行为。
我不希望仅在条件满足后才开始创建ScheduledThreadPoolExecutor对象,原因是我们的应用程序中存在大量此类定期计划任务,并且如果下次添加任何新任务并且如果他们忘记了在进行检查的代码部分中添加,然后将立即安排它,而不进行任何条件检查。为了避免它,我想要一个执行器服务,它将为我处理它,下次使用此执行器服务的任何人将默认免费获得此行为。
任何帮助表示赞赏。
谢谢
我认为您不会找到现成的ExecutorService来处理您的用例。那么为什么不尝试这样,创建扩展ScheduledThreadPoolExecutor的自定义类,并在那里覆盖beforeExecute
方法,在这里你编写代码来检查第一次执行(有自定义标志来检查它是否是第一次执行)而不是其他调用它将执行正常的runnable对象。类似下面的代码:
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestClass extends ScheduledThreadPoolExecutor {
public TestClass(int corePoolSize) {
super(corePoolSize);
}
@Override
protected void beforeExecute(Thread t, Runnable r) {
super.beforeExecute(t, r);
}
@Override
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {
return super.schedule(command, initialDelay, TimeUnit.MILLISECONDS);
}
}
如何提前创建执行程序,但只有在满足条件后才执行预先存在的执行程序的任务调度操作,并且您已经知道了所需的初始延迟。