Java TimerTask отмена не работает - PullRequest
       9

Java TimerTask отмена не работает

0 голосов
/ 29 августа 2018

Попытка TimerTask с ScheduledExecutorService. Запланируйте задачу с задержкой 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 ]

0 голосов
/ 29 августа 2018

Вы должны использовать ScheduledFuture, чтобы отменить задачу. Измените код на следующий, чтобы он работал.

ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);
System.out.println("cancelling task: "+ future.cancel(false));
0 голосов
/ 29 августа 2018

TimerTask предназначен для использования с классом Timer для планирования выполнения и поддержки отмены.

Когда вы планируете TimerTask через Executor, вы просто указываете исполнителю запустить Runnable, и контроль выполняется Executor; он не знает, что вы запускаете TimerTask, поэтому функции TimerTask не действуют.

Вы могли бы использовать Timer вместо ExecutorService или использовать методы ExecutorService для отмены выполнения.

...