今天修改了一个关于timer的程序,记一下 :
1. 要求按周期进行任务
2.可以进行重置
3.得知中断后立刻进行任务
package com.rfts.client;
import java.util.Timer;
import java.util.TimerTask;
//间隔n分钟发送心跳信息
public class HeartBeatTimer {
private Timer timer ;
private static long circle ;//心跳周期
private TimerTask task=null;
/**
* 根据开始计时时间和计时周期初始化计时器,并按周期执行任务
* @author rab
* */
public void startTimer() {
task = new TestTimerTask();
try {
circle = Long.parseLong(PropertyEditor.getPosition("CIRCLE"))*1000*3;
} catch (NumberFormatException e) {
System.err.println("NumberFormatException");
e.printStackTrace();
} catch (Exception e) {
System.err.println("Exception");
e.printStackTrace();
}
// 设置任务计划,启动和间隔时间
timer = new Timer();
System.out.println(circle);
timer.schedule(task, 0, circle);
}
/**
* 关闭计时器
*/
public void timerReset() {
try {
timer.cancel();
startTimer();
} catch (Exception e) {
e.printStackTrace();
}
}
// public static void main(String[] args) {
// HeartBeatTimer h = new HeartBeatTimer();
// TestTimerTask.CONTENT="good";
// h.startTimer();
//
// Random r = new Random();
// while(true){
// if(r.nextBoolean()){
// TestTimerTask.CONTENT = "good";
// }else{
// TestTimerTask.CONTENT = "bad";
// };
// try {
// Thread.sleep(3000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// /******reset start************/
// h.timerReset();
// /******reset end************/
// }
//
// }
}
task类
package com.rfts.client;
import java.util.Date;
import java.util.TimerTask;
/**
* 此计时器任务要执行的操作。
*/
public class TestTimerTask extends TimerTask {
/**
* 此计时器任务要执行的操作。
*/
public static String CONTENT="A";
public void run() {
//发送JMS
Date d = new Date();
System.out.println(d.toString());
System.out.println("JMS="+CONTENT);
}
}