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

计时器和计时器任务-如何从计时器任务运行中重新安排计时器

钱星华
2023-03-14

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

import java.util.Timer;
import java.util.TimerTask;

public class JavaReminder {

    public JavaReminder(int seconds) {
        Timer timer = new Timer();  
        timer.schedule(new RemindTask(timer, seconds), seconds*2000);
    }

    class RemindTask extends TimerTask {
        Timer timer;
        int seconds;
        RemindTask(Timer currentTimer, int sec){
            timer = currentTimer;
            seconds = sec;
        }

        @Override
        public void run() {
            System.out.println("ReminderTask is completed by Java timer");
            timer = new Timer(); 
            timer.schedule(this, seconds*200);
            System.out.println("scheduled");
        }
    }

    public static void main(String args[]) {
        System.out.println("Java timer is about to start");
        JavaReminder reminderBeep = new JavaReminder(2);
        System.out.println("Remindertask is scheduled with Java timer.");
    }
}

共有1个答案

单于善
2023-03-14

使用新的提醒任务,而不是现有任务。

它应该是

timer.schedule(new RemindTask(timer, seconds), seconds*200);

而不是

timer.schedule(this, seconds*200);
 类似资料:
  • 我有一个Java的计时器任务来生成每日报告。当我通过linux终端调用Java类(调度定时器任务),而不是在给定时间调度第一次运行时,它会在命令执行后立即运行。有人能建议为什么会这样吗... 我使用的计划它。 忘了补充一下,我使用的是java 1.5,这里是def方法 代码片段:

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

  • 我的计时器任务没有正常工作。我计划每3秒钟重复一次特定的任务,但这并没有发生。 根据Java文件: 计划(TimerTask任务、长延迟、长周期)。将指定的任务安排为重复的固定延迟执行,从指定的延迟后开始。随后的执行大约按规定的时间间隔定期进行。 但我只有一个“新任务!!!!”控制台打印 我是不是遗漏了什么? 谢谢 更新: 我将尝试在这里粘贴每一段相关的代码,从上到下执行。 开始:

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

  • 我已经使用java创建了特定于时区的计划任务事件。我的密码是贝娄。 但是问题是当调用这个方法时,它会很快运行这个任务。我需要每天12点在亚洲/科伦坡时区运行这项工作。那要怎么做?

  • 定时器 在传统的操作系统中,定时器是其中一个基础而重要的功能.它提供了基于时间事件的调度机制。在ucore 中,时钟(timer)中断给操作系统提供了有一定间隔的时间事件,操作系统将其作为基本的调度和计时单位(我们记两次时间中断之间的时间间隔为一个时间片,timer splice)。 基于此时间单位,操作系统得以向上提供基于时间点的事件,并实现基于时间长度的睡眠等待和唤醒机制。在每个时钟中断发生时