jdk @since 1.3开始提供 Timer来提供定时调度执行任务!
其实这个 简直 是 ”垃圾“之急, 可是当初又的用就是不错啦!
假设没有这个TImer我们自己怎么做!
自己这既个简单的哈!
1.首先需要构建个任务类的抽象,让需要执行的任务继承!
2.构建个任务队列用来存放代执行的任务。
3.构建个执行线程用来运行任务队列的任务。
4.对外提高调度执行任务的类 叫定时类
5.如何定时调度啊? 比如延迟delay=1秒 每2秒执行一次??
呵呵简单哈,调度时间去处当时时间System.currentTimeMillis()。
这样任务执行的时间就是System.currentTimeMillis()+delay
如何保证2秒后在执行?
每个任务加个执行时间。当第一次执行完就计算哈下次执行时间。
这样在执行线程 从任务队列 取出任务 拿当前时间与任务的执行时间比较 。如果当前时间大于任务执行时间就执行否则继续!
呵呵 语言 描述 也许 不好懂 ,多思考!
现在看看JDK怎么做的!
呵呵其实一样!
TimerTask类表示执行的任务
Timer定时类用来调度内部有2个类【内部类】TimerThread执行线程和TaskQueue任务队列
Timer timer = new Timer();
/*
private TimerThread thread = new TimerThread(queue);
public Timer() {
this("Timer-" + serialNumber());
}
public Timer(String name) {
thread.setName(name);
thread.start();//TimerThread 集成Thread自然调用run方法 看看润方法什么东东
//run 方法就是mainLoop();明白了就是循环 判断时间
} 线程启动 执行任务队列的任务啦!
*/
timer.schedule(new TimerTask() {
public void run() {
System.out.println(Thread.currentThread().getId() + "________"
+ this.scheduledExecutionTime());
}
}, 1000, 2000);
我们看看schedule方法就明白了!
里面调用:
sched(task, System.currentTimeMillis() + delay, -period);
设置好任务的执行时间加入任务队列
大家看的时候打开JDK的源代码看就明白了! java的基础很重要,否则往后走很难!