2007年06月21日 14:44:00
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);
}

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























































































































































Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1660778