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); }} Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1660778