我正在阅读 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");
}
}
我的问题是
我们可以使用单个计时器来拥有多个日程安排功能吗?请求在这里举一个例子以及它是如何工作的。例如,如果我们每 5 秒安排两个任务,如上所示,每 12 秒安排一个任务,但我想使用相同的 Reminder 对象而不是使用另一个(即创建)Reminder 对象。我想知道它在内部是如何工作的,就像计时器如何表示 5、5、2、3 等等。(因为我在我的项目中有同样的要求,我必须在 C++ 中完成而不使用 boost。我打算使用单个计时器而不是多个计时器。
什么是延迟参数以及如何使用它。schedule(TimerTask 任务,长延时,长周期)
感谢您的时间和帮助。