Java 如何在scheduledExecutorService中取消/终止任务scheduledExecutorService?
我有一个实现,我需要每小时设置一个时间表,以使IDs成为进程,并每分钟安排一次。如何在Java 如何在scheduledExecutorService中取消/终止任务scheduledExecutorService?,java,Java,我有一个实现,我需要每小时设置一个时间表,以使IDs成为进程,并每分钟安排一次。如何在scheduledExecutorServiceSecond中设置的每小时取消scheduledExecutorServiceSecond中的那些任务 public class Handler { private static final ScheduledExecutorService scheduledExecutorServiceFirst = MDScheduledExe
scheduledExecutorServiceSecond
中设置的每小时取消scheduledExecutorServiceSecond
中的那些任务
public class Handler {
private static final ScheduledExecutorService scheduledExecutorServiceFirst = MDScheduledExecutorService.wrap(
new ScheduledThreadPoolExecutor(1), "first-thread-%d");
private static final ScheduledExecutorService scheduledExecutorServiceSecond = MDScheduledExecutorService.wrap(
new ScheduledThreadPoolExecutor(2), "second-thread-%d");
//assuming this is the main method to call
private void main() {
scheduledExecutorServiceFirst.scheduleAtFixedRate(new ActionServiceImpl(db), 1, 3600, SECONDS);
}
private class ActionServiceImpl implements Runnable {
@Override
public void run() {
List<String> ids = getFromDB();
ids.forEach(id -> {
scheduledExecutorServiceSecond.scheduleAtFixedRate(new PaperImpl(id), 1, 60, SECONDS);
});
}
}
}
公共类处理程序{
私有静态最终ScheduleXecutorService ScheduleXecutorServiceFirst=mdScheduleXecutorService.wrap(
新ScheduledThreadPoolExecutor(1),“第一个线程-%d”);
私有静态最终ScheduleXecutorService ScheduleXecutorServiceSecond=mdScheduleXecutorService.wrap(
新ScheduledThreadPoolExecutor(2),“第二个线程-%d”);
//假设这是要调用的主要方法
私有void main(){
scheduledExecutorServiceFirst.scheduleAtFixedRate(新ActionServiceImpl(db),1360秒);
}
私有类ActionServiceImpl实现可运行{
@凌驾
公开募捐{
列表ID=getFromDB();
id.forEach(id->{
scheduledExecutorServiceSecond.scheduleAtFixedRate(新PaperImpl(id),1,60,秒);
});
}
}
}
我不确定我是否完全理解您的目的,但是您可以将scheduleAtFixedRate()
返回的ScheduledFuture
存储在ActionServiceImpl
的实例中,当调用run()
时,您可以调用cancel()
在计划新任务之前,请在上面单击它。@thomas您的意思是我需要存储一个计划未来的列表?然后一个接一个地取消?基本上是的,取消所有预定的期货,然后创建一个新的。当然,您也可以只保留已经存在的一个,用于以前处理过的ID。