1 原理:启动一个线程来刷时间,缺点是不太精确,可能跟线程的优先级有关系。
会有0-10ms的误差。精确到0.1s是没有问题的。
package
timer;

public
class
Timer
...
{
private long interval;
// private boolean enabled;
private Task task;
private Clock clock;

public Timer(long _interval, Task _task) ...{
super();
this.interval = _interval;
// this.enabled = enabled;
this.task = _task;
clock = new Clock();
clock.start();

new Thread(new Runnable() ...{

public void run() ...{
boolean b = true;

while (b) ...{
//System.out.println(clock.getCurrTime());

if (interval <= clock.getCurrTime()) ...{
System.out.println(clock.getCurrTime());
task.doit();
clock.setCurrTime(0);
//clock.stop();
//System.out.println(clock.getCurrTime());
//b = false;
}
}
}
}).start();
}

public Task getTask() ...{
return task;
}

public long getInterval() ...{
return interval;
}
// public boolean isEnabled() {
// return enabled;
// }
// public void setEnabled(boolean enabled) {
// this.enabled = enabled;
// }
}
package
timer;

public
class
Clock
extends
Thread
...
{
private long oldTime;
private long currTime;

public Clock() ...{
oldTime = System.currentTimeMillis();
currTime = 0;
}

public long getCurrTime() ...{
return currTime;
}
@Override
public void run() ...{

while (true) ...{
currTime = System.currentTimeMillis() - oldTime;
}
}

public void setCurrTime(long currTime) ...{
this.currTime = currTime;
}
}
package
timer;

public
interface
Task
...
{
void doit();
}
package
timer;

public
class
NewTask
implements
Task
...
{

public void doit() ...{
System.out.println( System.currentTimeMillis() );
}
}
package
timer;

public
class
Test
...
{

/** *//**
* @param args
*/
public static void main(String[] args) ...{
Task task = new NewTask();
Timer t = new Timer(1000,task);
}
}
本文介绍了一个简单的线程定时器实现方案。通过创建自定义的`Timer`类,并利用`Thread`来不断更新当前时间,当经过的时间达到设定的间隔时,触发特定任务。此定时器精度大约为0.1秒,适用于不需要高精度计时的应用场景。
原理和源码&spm=1001.2101.3001.5002&articleId=2261762&d=1&t=3&u=b845a17df41d4377922b0f2166e14026)
602

被折叠的 条评论
为什么被折叠?



