java中使用线程实现Timer(定时器)原理和源码
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);
}
}