博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中使用线程实现Timer(定时器)原理和源码
阅读量:4190 次
发布时间:2019-05-26

本文共 1781 字,大约阅读时间需要 5 分钟。

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

你可能感兴趣的文章
云管理软件 ManageIQ(转)
查看>>
CentOS 7.0,启用iptables防火墙(转)
查看>>
DISCUZ浅析之COOKIE篇
查看>>
实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)
查看>>
SSH中各个框架的作用以及Spring AOP,IOC,DI详解
查看>>
openstack juno 配置vmware(vcenter、vsphere)
查看>>
远程debug调试(eclipse)之openstack windows
查看>>
PAAS平台对比:OpenShift VS CloudFoundry【51CTO调研报告】
查看>>
JAX-RS(java restful实现讲解)(转)
查看>>
Spring MVC与JAX-RS比较与分析
查看>>
openstack官方docker介绍
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>
Linux命令之chmod详解
查看>>
【java小程序实战】小程序注销功能实现
查看>>
linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
查看>>
pentaho套件
查看>>
软件产品经理职责
查看>>
Linux下Tomcat的安装配置
查看>>
UI即User Interface
查看>>