JAVA精确定时器,利用系统时间,使长期工作的误差稳定。
功能:
·可定时启动任务或直接启动任务
·重复启动任务(时间间隔可在任务线程中改变,范围大于100ms,否则精度降低)
引用列表:
·import psn.razerpen.thread.AccuracyTimer;
·import psn.razerpen.thread.AccuracyTimerMission;
·import psn.razerpen.time.TimeStruct;
使用方法:
//1·继承AccuracyTimerMission接口,创建一个类。
class MyTimer implements AccuracyTimerMission {
//2·指定一个周期
int nDelay=1000;
//3·重写run方法(如不需要使用新线程执行任务,也可留空)
/**
* 任务线程,本函数继承自Runnable
*/
@Override
public void run() {
System.out.println(new TimeStruct());
}
//4·重写RunInCurrentThread(long nCurrentMilliSecond)方法。该方法接收当前时间,并返回下一次执行的时间。如果返回值不大于nCurrentMilliSecond则中止计时器。该方法必须重写。
/**
* 接收当前时间的毫秒值,并返回下一次执行的毫秒值。如果返回的下一个时间早于当前时间,则退出
*/
@Override
public long RunInCurrentThread(long nCurrentMilliSecond) {
return nCurrentMilliSecond+=nDelay;
}
}
//5·创建主线程代码
public class TestTimer {
public static void main(String[] args) throws InterruptedException {
//6·创建一个AccuracyTimer对象,并指定一个任务。
AccuracyTimer at=new AccuracyTimer(new MyTimer());
//7·(可选)如果不需要在新线程中启动任务,则写
// at.SetNewThreadEnabled(false);
//否则不写或者写
// at.SetNewThreadEnabled(true);
//8·(可选)设定第一次启动的时间点SetNextMissionTime/SetNextMissionMilliSecond或延迟时间SetNextMissionMilliSecondFromNow
//设置为当前这一分钟的第59秒后启动(不写此行则表示直接启动)
at.SetNextMissionTime(Integer.MIN_VALUE, -1, -1, -1, -1, 59, 0);
//9·启动定时器
at.Start();
//10·主线程继续
for(int i=0;i<60;++i){
Thread.sleep(1000);
}
//11·结束定时器
at.End();
}
}
详见sample.razerpen.thread包中TestTimer及各代码文件中注释
1