使用ScheduledExecutorService尝试TimerTask。 安排任务延迟10秒,然后调用task.cancel。 但是任务仍在运行,不确定会发生什么,并且如果cancel方法似乎没有执行任何取消操作。 请帮忙。
package xxx.xxx;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Tester {
static class OrderWaveTask extends TimerTask{
public void run() {
System.out.println("hi");
}
}
public static void main(String[] args) {
ScheduledExecutorService orderWaveTP = Executors.newScheduledThreadPool(3);
TimerTask task = new Tester.OrderWaveTask();
orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);
System.out.println("cancelling task: "+ task.cancel());
}
}
答案 0 :(得分:2)
您应该使用ScheduledFuture取消任务。将代码更改为以下代码即可使其正常工作。
ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);
System.out.println("cancelling task: "+ future.cancel(false));
答案 1 :(得分:0)
TimerTask旨在与Timer类一起使用,以计划执行并支持取消。
通过执行程序调度TimerTask时,实际上只是在告诉执行程序运行Runnable,而控制由执行程序执行;它不知道您正在运行TimerTask,因此TimerTask函数无效。
您的选择是使用计时器而不是ExecutorService,或使用ExecutorService方法取消执行。