Java TimerTask取消不起作用

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

    }


}


幕布斯6054654
浏览 477回答 2
2回答

沧海一幻觉

您应该使用 ScheduledFuture 取消任务。将您的代码更改为以下应该使其工作。ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);System.out.println("cancelling task: "+ future.cancel(false));

守候你守候我

TimerTask 旨在与 Timer 类一起使用,以便安排执行和支持取消。当您通过 Executor 调度 TimerTask 时,您实际上只是告诉 executor 运行一个 Runnable,而控制由 Executor 执行;它不知道您正在运行 TimerTask,因此 TimerTask 函数不起作用。您的选择是使用 Timer 而不是 ExecutorService,或者使用 ExecutorService 方法取消执行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java