当前位置: 首页 > 知识库问答 >
问题:

使用单个计时器安排多个通话

牧熙云
2023-03-14

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

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

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

任务队列被实现为优先级队列,以便可以有效地识别下一个到期的TimerWork。计时器线程简单地等待,直到这个过期。

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");
    }
}

我的问题是

>

这里的延迟参数是什么,以及如何使用它。时间表(TimerTask任务、长延迟、长周期)

谢谢你的时间和帮助。

共有1个答案

蓝苗宣
2023-03-14

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

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

顺便说一句,1.3是生命的终结,在Sun正式设定生命终结日期之前。它很古老,除非你喜欢历史课,否则我建议你活在当下

顺便说一句,Java 5.0和Java 6都是生命的终结,Java 7将于明年宣布生命的终结日期。

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

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

 类似资料:
  • 但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。 以下是它如何处理一项任务: 但是我完全被多个任务应该如何创建然后运行所困扰。 但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。

  • 我正在开发一个Windows服务应用程序。NET,它执行许多功能(它是一个WCF服务主机),其中一个目标是运行调度的任务。 我选择创建System.Threading。每个操作的计时器,dueTime设置为下一次执行,并且没有时段以避免重新进入 每次操作结束时,都会更改dueTime以匹配下一次计划执行。 大多数操作计划每分钟运行一次,不是一起运行,而是彼此延迟几秒钟。 现在,在添加了一些操作(大

  • 或者我应该为每个汽车品牌提供一个单独的endpoint,它有一个具有该汽车品牌所需的确切属性的主体。 因此,在第一种方法中,我有一个endpoint,它有一个string参数,我希望它是一个具有所有必要值的JSON 而在第二种方法中,在第二种场景中,每种汽车品牌都有一个endpoint,每个endpoint都有一个类型dto对象,表示它需要的所有值。

  • 我正在努力得到正确的语法下面。我尝试过不同的工会,但都没有成功。 我需要将这三个总数相加为“totcount”。数据表非常大,希望找到一种比第4个子查询更好的方法来获取totcount。

  • 我正在使用Hadoop处理一个mapreduce项目。我目前有3个连续的工作。 我想使用Hadoop计数器,但问题是我想在第一个作业中进行实际计数,却在第3个作业的reducer中访问计数器值。 我怎样才能做到这一点呢?我应该在哪里定义?我需要通过它扔第二个工作吗?这也将有助于看到一些代码示例这样做,因为我还没有找到任何东西。 注意:我使用的是Hadoop 2.7.2 编辑:我已经尝试了这里解释的

  • 我想我并不完全理解计时器和TimerTask在Java和Android中是如何工作的。现在,我定义了一些定期任务,在一个计时器内安排。 我想知道我应该使用单个计时器来安排任务,还是为每个任务使用不同的计时器实例?计时器有自己的线程吗?是否在新线程中执行计划的任务?背景中发生了什么? 这些方法有什么不同? 方法1的示例代码: 方法2的示例代码: