使用 ScheduledExecutorService 尝试 TimerTask。安排一个延迟 10 秒的任务,并调用 task.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()); }}
2 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
您应该使用 ScheduledFuture 取消任务。将您的代码更改为以下应该使其工作。
ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);
System.out.println("cancelling task: "+ future.cancel(false));
守候你守候我
TA贡献1802条经验 获得超10个赞
TimerTask 旨在与 Timer 类一起使用,以便安排执行和支持取消。
当您通过 Executor 调度 TimerTask 时,您实际上只是告诉 executor 运行一个 Runnable,而控制由 Executor 执行;它不知道您正在运行 TimerTask,因此 TimerTask 函数不起作用。
您的选择是使用 Timer 而不是 ExecutorService,或者使用 ExecutorService 方法取消执行。
添加回答
举报
0/150
提交
取消