用一个 Timer 处理多个 TimerTasks

Handling multiple TimerTasks with one Timer

有了一个 TimerTask,一切看起来都非常简单并且工作正常。
但是我不能在一个定时器内处理不同的'TimerTasks'。 我尝试将 TimerTask 对象添加到构造函数中,但是当我将新的 TimerTask (RemindTask1) 对象作为参数(内部 class 的实例)传递时出现编译错误。

以下是它如何处理一项任务:

public class MyTimer {
    Timer timer;

    public MyTimer(long time) {
        timer = new Timer();
        timer.schedule(new RemindTask(), time);
    }

    class RemindTask extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    public static void main(String[] args) {
        /// ...
        MyTimer myTimer = new MyTimer(5000);
        /// ...
    }
}

但我完全不知道应该如何创建多个任务,然后 运行。

public class MyTimer {
    Timer timer;

    public MyTimer(TimerTask tt, long time) {
        timer = new Timer();
        timer.schedule(tt, time);
    }

    class RemindTask1 extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    class RemindTask2 extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    public static void main(String[] args) {
        /// ...
        MyTimer myTimer = new MyTimer(new RemindTask2(), 5000);
        /// ...
    }
}

但这不起作用,我不知道哪里出了问题。 当我将 new RemindTask2() 作为参数传递时出现编译错误。

我假设 "not working" 你的意思是编译器不允许你从静态上下文(main 方法)创建内部 class RemindTask2 的实例.

一般有两种处理方式。

  1. MyTimer 实例为您创建其内部 class 实例。这实际上不是你的选择,因为你需要内部 class 实例存在 before 你构造 MyTimer.
    MyTimer myTimer;
    // initialize myTimer
    TimerTask task = myTimer.new RemindTask2();
  1. 通过添加 static 关键字将内部 classes 更改为嵌套 classes。这是您的选择。
    static class RemindTask2 extends TimerTask {
        //...
    }