Java TimerTask取消不起作用

时间:2018-08-29 15:14:12

标签: java timertask

使用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());
    }

}

2 个答案:

答案 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方法取消执行。