0

我正在阅读 Java SDK 1.3 中的计时器

在主动对象模式的POSA第2卷中提到如下

JDK 1.3 引入了一种机制,用于在 java.util.Timer 和 java.util.TimerTask 类中同时执行基于计时器的任务。当一个任务的预定执行时间发生时,它就会被执行。调度调用在 clinets 线程中执行,而任务本身在 Timer 对象拥有的线程中执行。定时器内部任务队列受锁保护,因为上面概述的两个线程同时对其进行操作。

任务队列被实现为优先级队列,以便可以有效地识别下一个 TimerTask 到期。计时器线程只是等到此到期。

public class Reminder {
    Timer timer;

    public Reminder(int seconds) {
        timer = new Timer();
        timer.schedule(new RemindTask(), seconds*1000);
    }

    class RemindTask extends TimerTask {
        public void run() {
            System.out.format("Time's up!%n");
            timer.cancel(); //Terminate the timer thread
        }
    }

    public static void main(String args[]) {
        new Reminder(5);
        System.out.format("Task scheduled.%n");
    }
}

我的问题是

  1. 我们可以使用单个计时器来拥有多个日程安排功能吗?请求在这里举一个例子以及它是如何工作的。例如,如果我们每 5 秒安排两个任务,如上所示,每 12 秒安排一个任务,但我想使用相同的 Reminder 对象而不是使用另一个(即创建)Reminder 对象。我想知道它在内部是如何工作的,就像计时器如何表示 5、5、2、3 等等。(因为我在我的项目中有同样的要求,我必须在 C++ 中完成而不使用 boost。我打算使用单个计时器而不是多个计时器。

  2. 什么是延迟参数以及如何使用它。schedule(TimerTask 任务,长延时,长周期)

感谢您的时间和帮助。

4

1 回答 1

1

如果您不必使用 SDK 1.3,您可以使用 Java 5.0,它引入了 ScheduledExecutorService,这使得 Timers 成为多余的恕我直言。

ScheduledExecutorService 已经有 9 年多了,也许是时候升级了。

BTW 1.3 在 Sun 正式宣布停产日期之前就已停产。它很古老,除非你喜欢历史课,否则我建议你活在当下。;)

顺便说一句,Java 5.0 和 Java 6 都已结束生命周期,而 Java 7 将在明年宣布其生命周期结束日期。

因此,如果我是您,我会关注 Java 7 或 8,而忽略任何超过几年的东西,因为互联网上有许多不好的或过时的做法,而且它们没有得到更新。

如果您喜欢了解不良或过时的做法,rose india 网站是我发现的最好的集合。;)

于 2013-09-13T08:00:07.077 回答