为了账号安全,请及时绑定邮箱和手机立即绑定

Java TimerTask取消不起作用

Java TimerTask取消不起作用

幕布斯6054654 2021-08-19 18:47:42
使用 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));


查看完整回答
反对 回复 2021-08-19
?
守候你守候我

TA贡献1802条经验 获得超10个赞

TimerTask 旨在与 Timer 类一起使用,以便安排执行和支持取消。

当您通过 Executor 调度 TimerTask 时,您实际上只是告诉 executor 运行一个 Runnable,而控制由 Executor 执行;它不知道您正在运行 TimerTask,因此 TimerTask 函数不起作用。

您的选择是使用 Timer 而不是 ExecutorService,或者使用 ExecutorService 方法取消执行。


查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 422 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信