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

使用一个计时器处理多个计时器任务

宗政昱
2023-03-14


但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。

以下是它如何处理一项任务:

public class MyTimer {
    Timer timer;

    public MyTimer(long time) {
        timer = new Timer();
        timer.schedule(new RemindTask(), time);
    }

    class RemindTask extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    public static void main(String[] args) {
        /// ...
        MyTimer myTimer = new MyTimer(5000);
        /// ...
    }
}

但是我完全被多个任务应该如何创建然后运行所困扰。

public class MyTimer {
    Timer timer;

    public MyTimer(TimerTask tt, long time) {
        timer = new Timer();
        timer.schedule(tt, time);
    }

    class RemindTask1 extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    class RemindTask2 extends TimerTask {
        @Override
        public void run() {
            /// ...
            timer.cancel();
        }
    }

    public static void main(String[] args) {
        /// ...
        MyTimer myTimer = new MyTimer(new RemindTask2(), 5000);
        /// ...
    }
}

但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。

共有1个答案

辛成周
2023-03-14

我假设“不工作”是指编译器不允许您从静态上下文(main方法)创建内部类的实例。

通常有两种处理方法。

  1. 请一个MyTimer实例为您创建其内部类实例。这实际上不是一个选项,因为在构造MyTimer之前,需要存在内部类实例
    MyTimer myTimer;
    // initialize myTimer
    TimerTask task = myTimer.new RemindTask2();
    static class RemindTask2 extends TimerTask {
        //...
    }

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

  • 我正在阅读JavaSDK1.3中的计时器 在POSA第2卷的“活动对象模式”中,它被提到如下 JDK1.3引入了一种机制,用于在Timer和TimerTaskjava.util.类中同时执行基于计时器的任务java.util.。当任务的预定执行时间发生时,它将被执行。调度调用在垫片线程中执行,而任务本身在Timer对象拥有的线程中执行。计时器内部任务队列受到锁的保护,因为上面概述的两个线程同时对其

  • 基本上,我想做的是制作一个计时器,在x秒后运行一个特定的TimerTask,但是TimerTask可以重新安排计时器在y秒后执行任务。下面是一个示例,它在我试图在TimerTask run中调度此任务的行上给出了一个错误“线程中的异常”Timer-0“java.lang.IllegalStateException:任务已调度或已取消”。

  • 问题内容: 对于这个问题,我很抱歉,但是我已经阅读了很多东西,而且看来我还不懂如何做一个计时器。所以我发布我的代码: 我正在尝试使该对象每200毫秒朝目标移动一次。我没有自我尝试过,它给了我同样的错误: 我不知道如何将计时器连接到带有参数的函数。我以为我没有正确使用SLOT参数,但这给了我这些错误。我想这都是错的。我将不胜感激:) 问题答案: 使用新样式的信号,它们更容易理解。 交换- 与- 一个

  • 问题 你想记录程序执行多个任务所花费的时间 解决方案 time 模块包含很多函数来执行跟时间有关的函数。 尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。例如: import time class Timer: def __init__(self, func=time.perf_counter): self.elapsed = 0.0

  • 我使用Timer和TimerTask为聊天应用程序长轮询新消息。我想研究两种“稍微”不同的可能性: 1:计时器声明为局部变量 *问题:每次调用该方法时,我都会看到创建了一个新线程,[Timer-1]、[Timer-2]等等。。在Eclipse调试窗口中,即使在getLastMessages(..)之后,它们似乎都在运行完成运行并向客户端返回值。如果计时器实际使用线程,并且在几次事务之后,服务器最终