使用一个定时器处理多个TimerTasks

时间:2015-03-05 20:31:13

标签: java timer timertask

使用一个TimerTask,一切看起来都很简单,工作正常 但我无法在一个Timer内处理不同的'TimerTasks'。 我尝试将TimerTask对象添加到构造函数中,但是当我将新的TimerTask(RemindTask1)对象作为参数(内部类的实例)传递时,会出现编译错误。

以下是一项任务的工作原理:

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);
        /// ...
    }
}

但那不起作用,我无法弄清楚出了什么问题。 当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。

1 个答案:

答案 0 :(得分:0)

我认为“不工作”是指编译器不允许您从静态上下文(RemindTask2方法)创建内部类main的实例。

通常有两种方法可以解决这个问题。

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