单个计时器的多个计划调用

时间:2013-09-13 06:18:28

标签: java timer

我正在阅读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. 这里的延迟参数是什么以及如何使用它。  计划(TimerTask任务,长延迟,长期)

  3. 感谢您的时间和帮助。

1 个答案:

答案 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,并忽略任何超过几年的事情,因为有许多做法要么糟糕,要么在互联网上过时而且没有得到更新。

如果您喜欢了解不良或过时的做法,玫瑰印度网站是我发现的最好的收藏品。 ;)