`
ssydxa219
  • 浏览: 622515 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

jdk schedule timer task

 
阅读更多

Implementing and scheduling a task to be executed by a timer
1) Implement a custom subclass of TimerTask. The run method contains the code that performs the task.
    class RemindTask extends TimerTask {
        public void run() {
            System.out.println("Time up!");
            System.exit(0);
        }
    }
2) Create a thread by instantiating the Timer class
    Timer timer = new timer();
3) Instantiate the timer task object(new RemindTask())
    RemindTask task = new RemindTask();
4) Schedule the timer task for execution.
  (1) execute the task after special milliseconds delay.
    timer.schedule(task,5*1000);
  (2) specify the time when the task suould execute.
    //execute the task at 11:01 p.m
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY,23);
    calendar.set(Calendar.MINUTE,1);
    calendar.set(Calendar.SECOND,0);
    Date time = calendar.getTime();

    timer.schedule(task,time);

Stopping Timer Threads
  By defaulst, aprogram keeps running as long as its timer threads are running. There is four ways to terminate a timer thread
  1) Invoke cancel on the timer.(timer.cancel())
  2) Make the timer's thread a daemon(后台), by creating the timer like this: new Timer(true). If the only threads left in the program are daemon threads, the program exits.
  3) After all the timer scheduleds tasks have finished executing,remove all references to the Timer object. the timer thread will terminate.
  4) Invoke the System.exit method, which makes the entire program and all its threads exit.

Performing a Task repeatedly
There is four Timer method to perform a task repeatedly
  * schedule(TimerTask task, long delay, long period)
    Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay. Subsequent executions take place at approximately regular intervals separated by the specified period.
    执行重复的任务,第一次在延时时间后执行,往后的以特定的时间间隔执行
    timer.schedule(new RemindTask(),3*1000,1*1000)
    RemindTask任务将会在3秒后执行,以后将会以1秒的间隔重复执行

  * schedule(TimerTask task, Date time, long period)
    执行重复的任务,第一次在特定的时间执行,往后的以特定的时间间隔执行

  * scheduleAtFixedRate(TimerTask task, long delay, long period)
    Schedules the specified task for repeated fixed-rate execution, beginning after the specified delay. Subsequent executions take place at approximately regular intervals, separated by the specified period.
    以固定的延时执行重复的任务,首次执行在特定的延时之后,以后的执行发生在特定的时间间隔之后
    temer.scheduleAtFixedRate(new RemindTask(),3*1000,1*1000)
  * scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
    执行重复的任务,第一次在特定的时间执行,往后的以特定的时间间隔执行

  schedule和scheduleAtFixedRate的区别在于,schedule以固定的相对时间间隔执行,如果某一次执行被延时了,往后的执行 的执行时间也会相对延时;而scheduleAtFixedRate是以绝对的时间间隔执行,如果某一次执行被延时,它的后一次执行的延时将会缩短。

 

 /**
  * TimerTask第一次执行时间与被调度之间的间隔
  */
 public static final int DELAY = 1000 * 10;
 
 /**
  * TimerTask循环执行之间的时间间隔10s
  */
 public static final int PERIOD_BETWEEN_LOOP = 1000 * 10;

 

 

 Calendar calendar = GregorianCalendar.getInstance();
  calendar.set(Calendar.MINUTE, 50);
  calendar.set(Calendar.SECOND, 0);
  Date startTime = calendar.getTime();
  
  TimerTask task = new TimerTaskImpl();
  Timer timer = new Timer();
  
  //测试时需要逐一测试,否则会出错
  //java.lang.IllegalStateException: Task already scheduled or cancelled
  
  //执行一次,startTime在当前时间之前则马上执行
  //timer.schedule(task, startTime);
  //执行一次
  //timer.schedule(task, DELAY);
  //startTime时间在当前时间之后,
  //则从startTime开始循环执行,即使某个时间间隔中由于某种问题间隔时间>10S,下一次间隔时间也仍为10S
  //Sat Mar 19 22:50:00 CST 2011
  //Sat Mar 19 22:50:11 CST 2011
  //Sat Mar 19 22:50:21 CST 2011
  //startTime时间在当前时间之前,
  //则从当前时间开始循环执行N次
  //Sat Mar 19 22:57:53 CST 2011
  //Sat Mar 19 22:58:04 CST 2011
  //Sat Mar 19 22:58:14 CST 2011
  //timer.schedule(task, startTime, PERIOD_BETWEEN_LOOP);
  //从被调度的时间开始计时,DELAY之后第一次执行,之后每隔PERIOD_BETWEEN_LOOP执行一次
  //对时间间隔超时的处理方式与上一方法一致
  //timer.schedule(task, DELAY, PERIOD_BETWEEN_LOOP);
  //startTime时间在当前时间之后,
  //则从startTime开始循环执行,如果某个时间间隔中由于某种问题间隔时间>10S,下一次间隔时间则会<10s,从而使频率不变
  //startTime时间在当前时间之前,
  //则立即执行(currentTime-startTime) / PERIOD_BETWEEN_LOOP + 1次,然后以上述方式进行循环
  timer.scheduleAtFixedRate(task, startTime, PERIOD_BETWEEN_LOOP);
  //从被调度的时间开始计时,DELAY之后第一次执行,之后每隔PERIOD_BETWEEN_LOOP执行一次
  //对时间间隔超时的处理方式与上一方法一致
  //timer.scheduleAtFixedRate(task, DELAY, PERIOD_BETWEEN_LOOP);

分享到:
评论

相关推荐

    Jdk的Timer 实现定时器

    Java开发工具包(JDK)中的`Timer`类是一个实用工具类,用于调度周期性或一次性任务。在Java编程中,我们经常需要执行一些任务,这些任务需要在特定的时间点或者按照一定的间隔重复执行,例如更新进度条、心跳检测、...

    spring + jdk TimerTask定时器

    public ScheduledFuture&lt;?&gt; schedule(Runnable task, Trigger trigger) { // 使用JDK的Timer调度任务 } } ``` ### 触发策略 在Spring中,你可以通过`Trigger`来决定任务何时触发。虽然Spring不直接支持`...

    spring+jdk定时器

    使用JDK定时器的基本步骤包括创建`Timer`对象,然后使用`schedule(TimerTask task, long delay)`或`schedule(TimerTask task, Date firstTime, long period)`方法来安排任务。`TimerTask`是可重用的异步任务,你需要...

    Timer和TimerTask的使用

    - 调用了`timer.schedule(new MyTask(), 1000, 2000)`来安排任务,在1秒后首次执行,并且每2秒重复执行一次。 - 使用了一个无限循环来等待用户的输入,如果用户输入字符`c`,则调用`timer.cancel()`来取消所有的定时...

    jdk定时器调度

    Java中的JDK定时器是基于`java.util.Timer`和`java.util.TimerTask`这两个类实现的,它们提供了在特定时间点或周期性地执行任务的能力。`Timer`类是一个抽象的基类,它负责调度任务的执行,而`TimerTask`则是一个...

    JDK5中的多线程并发库.doc

    - **安排任务**:`schedule(TimerTask task, long delay)`、`schedule(TimerTask task, Date time)`、`schedule(TimerTask task, long initialDelay, long period)`以及`schedule(TimerTask task, Date firstTime, ...

    java类Timer和TimerTask的使用.pdf

    除了上述方法,JDK 5+还引入了一个新的方法`scheduleAtFixedRate(TimerTask task, long delay, long period)`。这个方法和`schedule`类似,但不同之处在于它会尽力确保任务按照固定的频率执行,即使前一次执行因为...

    详解JAVA Timer和TimerTask

    schedule方法可以指定任务的执行时间和频率,例如schedule(task, delay)方法将任务task执行在delay毫秒后,schedule(task, delay, period)方法将任务task执行在delay毫秒后,并以period毫秒为周期重复执行。...

    jdk自带定时器使用方法详解

    JDK 自带的定时器(`java.util.Timer` 类)是一种强大的工具,允许开发者安排任务在后台线程中按特定时间或周期性地执行。它为应用程序提供了灵活的调度功能,比如延迟执行、周期性执行等。下面我们将深入探讨 `...

    Spring 任务调度

    - **JDK Timer**:提供了`Timer`和`TimerTask`两个类。`TimerTask`是一个抽象类,实现了`Runnable`接口,用于定义需要调度的任务。`Timer`类则用于管理和调度这些任务,通过`schedule`方法来安排任务的执行。 - **...

    JAVA TIMER简单用法学习

    timer.schedule(myTask, 1000, 2000); // 在1秒后执行,每2秒执行一次 // 可以通过取消任务来停止特定的 TimerTask myTask.cancel(); // 或者通过取消 Timer 来停止所有任务 timer.cancel(); } static ...

    Java定时器Timer使用方法详解

    4. 周期性运行:Timer.schedule(TimerTask task,Date firstTime,long period) 从firstTime开始每隔period毫秒执行一次任务。 5. schedule(TimerTask task,long delay) 当前的时间为参考时间,在此时间基础上延迟制定...

    java定时任务Timer和TimerTask使用详解

    在Java中,`java.util.Timer` 和 `java.util.TimerTask` 类提供了这样的功能,它们是JDK自带的,不需要引入额外的库。 1. **Timer类**: `Timer` 类是一个线程类,它可以安排在将来的某个时间点执行一个或多个任务...

    java8集合源码-java:JDK8新特性

    java8集合源码定时器和定时器任务 定时器是线程调度任务以在后台...schedule( new TimerTask () { @Override public void run () { System . out . println( " Run task 3 seconds after application startup " ); } },

    java定时器(定时任务)

    - 创建一个 `Timer` 对象后,你可以通过 `schedule(TimerTask task, long delay)` 或 `schedule(TimerTask task, Date firstTime, long period)` 方法来安排任务。`delay` 参数指定了任务延迟执行的时间,`period` ...

    java 定时器

    然后,通过调用`Timer`的`schedule(TimerTask task, long delay)`方法,可以安排一个任务在延迟`delay`毫秒后执行。如果要周期性执行,可以使用`schedule(TimerTask task, long initialDelay, long period)`,这个...

    java 实现定时的方法及实例代码

    本篇文章将深入探讨Java中实现定时任务的方法,包括使用JDK内置的`Timer`和`TimerTask`类。 首先,`Timer`类是Java中实现定时任务的核心,它提供了一个后台线程来调度和执行定时任务。`Timer`有四个构造函数,但...

    详解java定时任务

    本篇将详细讲解如何使用JDK中的`Timer`类和`TimerTask`类来实现定时任务。 1. `Timer`类 `Timer`是Java提供的一个定时器工具,它可以安排一个或多个任务在后台线程中执行。`Timer`类具有线程安全性,允许多个线程...

    JAVA编程,课程设计

    Java Timer类提供了`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long period)`等方法来安排任务的执行。TimerTask是一个抽象类,你需要创建它的子类并实现run()方法,该...

Global site tag (gtag.js) - Google Analytics