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