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

Java 使用单个计时器的多个计划调用,java,timer,Java,Timer,我正在阅读JavaSDK1.3中的计时器 它在POSA第2卷的活动对象模式中提到如下 JDK1.3引入了用于执行基于计时器的任务的mechansim 同时在类java.util.Timer和java.util.TimerTask中。 当任务的计划执行时间发生时,它是 执行。调度调用在clinets线程中执行, 而任务本身是在计时器拥有的线程中执行的 对象计时器内部任务队列受锁保护,因为 上面列出的两个线程同时对其进行操作 任务队列作为优先级队列实现,以便下一个 可以有效地识别要过期的TimerT

我正在阅读JavaSDK1.3中的计时器

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

JDK1.3引入了用于执行基于计时器的任务的mechansim 同时在类java.util.Timer和java.util.TimerTask中。 当任务的计划执行时间发生时,它是 执行。调度调用在clinets线程中执行, 而任务本身是在计时器拥有的线程中执行的 对象计时器内部任务队列受锁保护,因为 上面列出的两个线程同时对其进行操作

任务队列作为优先级队列实现,以便下一个 可以有效地识别要过期的TimerTask。计时器线程 只需等待,直到到期

我的问题是

  • 我们能用一个定时器实现多个时间表功能吗?请求在此处给出一个示例及其工作原理。例如,如果我们有两个计划,一个任务每5秒执行一次,如上所示,另一个任务每12秒执行一次,但我希望使用相同的提醒对象,而不是使用另一个(即创建)提醒对象。我想知道它在内部是如何工作的,比如5,5,2,3等等。(因为我的项目中有相同的要求,我必须在C++中使用Boost来完成。我计划使用单定时器而不是多定时器。

  • 这里的延迟参数是什么以及如何使用它。 计划(TimerTask任务、长延迟、长周期)


  • 感谢您的时间和帮助。

    如果您不必使用SDK 1.3,您可以使用Java 5.0,它引入了ScheduledExecutorService,使计时器成为多余的IMHO

    ScheduledExecutorService已经存在9年多了,也许是时候升级了

    顺便说一句,1.3是生命的终结,在太阳正式宣布生命终结日期之前。它是古老的,除非你喜欢历史课,否则我建议你活在现在

    顺便说一句,Java5.0和Java6都是生命的终结,Java7将于明年宣布生命的终结日期

    如果我是你的话,我会看看Java7或Java8,忽略任何超过几年的东西,因为在互联网上有很多不好的或过时的实践,它们不会得到更新


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

    为什么要阅读SDK 1.3?我的问题是,正如作者在SDK 1.3中提到的,这里也提到了
    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");
        }
    }