我正在阅读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。我打算使用单个计时器而不是多个计时器。
这里的延迟参数是什么以及如何使用它。 计划(TimerTask任务,长延迟,长期)
感谢您的时间和帮助。
答案 0 :(得分:1)
如果您不必使用SDK 1.3,则可以使用引入ScheduledExecutorService的Java 5.0,这会使Timers成为冗余恕我直言。
ScheduledExecutorService已经有9年多了,也许是升级的时候了。
在太阳报正式结束生命日期之前,BTW 1.3已经结束。这是古老的,除非你喜欢历史课,否则我建议你住在现在。 ;) BTW Java 5.0和Java 6都是生命的终结,Java 7将在明年宣布其生命终结日期。所以,如果我是你,我会看Java 7或8,并忽略任何超过几年的事情,因为有许多做法要么糟糕,要么在互联网上过时而且没有得到更新。
如果您喜欢了解不良或过时的做法,玫瑰印度网站是我发现的最好的收藏品。 ;)