问题:
我有一个任务,必须在每个任务运行之后以固定的延迟定期运行。我也有条件 在满足条件后应该在最初的延迟或首次执行的地方。所以执行者必须 在满足条件之前,不要安排任务。
Java并发包为我们提供了ScheduledThreadPoolExecutor,它具有用于初始时间延迟的选项。但就我而言 初始延迟是在某些条件或值更改为所需条件之后。
我如何实现此行为以及应使用哪种executorservice或可以重写executor服务中的哪些方法以实现上述行为。
我不想仅在条件满足后才开始创建ScheduledThreadPoolExecutor对象,原因是 我们的应用程序中存在大量此类定期计划任务,如果下次添加任何新任务, 如果他们忘记在进行检查的代码部分中添加代码,则将立即安排它,而无需进行任何条件检查。 为了避免它,我想要一个执行者服务来为我处理它,下次使用此executorservice的任何人默认情况下都会获得此服务 免费行为。
感谢您的帮助。
谢谢
答案 0 :(得分:0)
我认为您不会找到现成的ExecutorService来处理您的用例。因此,为什么不这样尝试,请创建扩展ScheduledThreadPoolExecutor的自定义类,并在其中覆盖beforeExecute
方法,然后在此处编写代码以检查首次执行(具有自定义标志以检查是否是第一次执行),比其他调用它将执行正常的可运行对象。类似于以下代码:
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);
}
}
答案 1 :(得分:0)
您如何提前创建执行程序,但是仅在满足条件并且已经知道所需的初始延迟之后,才对预先存在的执行程序执行计划任务的操作。