首页 > 解决方案 > 从 ThreadPoolTask​​Scheduler 池 Spring 中删除任务

问题描述

我正在使用 ThreadPoolTask​​Scheduler 和 Scheduler 来创建任务,但是当我设置一个新任务时,我想删除其中的某个或全部,我该怎么做?

    @Bean
public ThreadPoolTaskScheduler createThreadPoolTaskScheduler() {
    ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setPoolSize(10);
    threadPoolTaskScheduler.setThreadNamePrefix(threadPrefix);
    threadPoolTaskScheduler.initialize();
    return threadPoolTaskScheduler;
}

添加任务:

private final Scheduler scheduler;
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
public void addTask(){
    FixedRateTask update = new FixedRateTask(this::executeOnRateMethod
            , initialDelay, waitTime);

    taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    scheduler.setTask(taskRegistrar.scheduleFixedRateTask(update));
}

似乎在调用:

taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
taskRegistrar.scheduleFixedRateTask(update);

每次都将线程添加到池中,取消调度程序也不起作用:

scheduler.getTask().cancel();

标签: javaspring

解决方案


当你安排了一个 future时,ScheduledFuture<?>将返回。 ScheduledFuture<?>has scheduledFuture.cancel(false),它将取消你放在执行器中的计划任务。


推荐阅读