Java TimerTask 取消不起作用

Java TimerTask cancel doesn't work

正在尝试使用 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());
    }

}

TimerTask 旨在与 Timer class 一起使用以安排执行并支持取消。

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

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

您应该使用 ScheduledFuture 取消任务。将您的代码更改为以下应该可以正常工作。

ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);
System.out.println("cancelling task: "+ future.cancel(false));