Java 使用线程池提交任务 schedulerschedule 已经提交过的任务 怎么废弃重新放入开始计时
要废弃并重新放入开始计时的任务,可以使用 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秒执行。这样就实现了废弃并重新放入开始计时的效果
原文地址: http://www.cveoy.top/t/topic/iXvI 著作权归作者所有。请勿转载和采集!