要废弃并重新放入开始计时的任务,可以使用 ScheduledFuture.cancel() 方法来取消任务,并将任务从线程池的任务队列中移除。然后,使用 scheduler.schedule() 方法将任务重新提交到线程池。

下面是一个示例代码:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(String[] args) {
        // 创建一个大小为1的线程池
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 提交任务并获取ScheduledFuture对象
        ScheduledFuture<?> future = scheduler.schedule(new MyTask(), 10, TimeUnit.SECONDS);

        // 等待10秒后取消任务
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        future.cancel(true);

        // 重新提交任务,并开始计时
        future = scheduler.schedule(new MyTask(), 5, TimeUnit.SECONDS);
    }

    static class MyTask implements Runnable {
        @Override
        public void run() {
            System.out.println("Task executed!");
        }
    }
}

上述代码首先创建了一个大小为1的线程池 scheduler,然后使用 schedule() 方法提交了一个延迟10秒执行的任务,并获取了 ScheduledFuture 对象 future

接着,通过调用 future.cancel(true) 方法取消了任务,并从线程池的任务队列中移除。

最后,再次使用 schedule() 方法重新提交了任务,并设置延迟5秒执行。这样就实现了废弃并重新放入开始计时的效果

Java 使用线程池提交任务 schedulerschedule 已经提交过的任务 怎么废弃重新放入开始计时

原文地址: http://www.cveoy.top/t/topic/iXvI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录