读书人

JDK工具种Timer

发布时间: 2012-12-19 14:13:14 作者: rapoo

JDK工具类Timer

Timer为JDK自带的任务调度工具类。

结构简单易用,功能也比较有限,而且容易出现误差。

?

1.结构简介

?

JDK工具种Timer

Timer:任务调度器

?

TimerTask:任务接口,所有被Timer调度的任务都需实现此接口

?

2.实例

?

/**
?* TimerTest.java
?* Create by Administrator at 10:29:18 PM
?*/
package com.siyuan.timer;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;

/**
?* @author Administrator
?* @Description
?*/
public class TimerTest {
?/**
? * TimerTask第一次执行时间与被调度之间的间隔
? */
?public static final int DELAY = 1000 * 10;
?
?/**
? * TimerTask循环执行之间的时间间隔10s
? */
?public static final int PERIOD_BETWEEN_LOOP = 1000 * 10;
?
?/**
? *
? * @author Administrator
? * @Description
? */
?public static class TimerTaskImpl extends TimerTask {

??@Override
??public void run() {
???System.out.println(new Date());
??}
??
?}
?
?/**
? * @param args
? */
?public static void main(String[] args) {
??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);
?}

}

?

3.参考资料

?

? JDK



?

读书人网 >编程

热点推荐