您的位置:首页 > 编程语言 > Java开发

java中使用线程实现Timer(定时器)原理和源码

2007-10-28 09:22 981 查看
2007年06月21日 14:44:00
下载源码和示例
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: