Timer
定义:
有且仅有一个后台线程对多个业务线程进行定时定频率的调度。
主要构件:Timer 和TimerTask Timer可以理解为后台的线程,TimerTask可以理解为业务线程。
Timer工具类详解
这里有两个主要属性,一个是thread,一个是queue。thread里的TimerThread对应的就是后台线程,queue里的TimeTask对应的就是我们的业务线程。我们主要关注Timer和TimerTask就可以,其余模块是对我们是透明的。
下面讲个小栗子:
package com.imooc.timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
private String name;
public MyTimerTask(String inputName) {
name = inputName;
}
//重写run方法
public void run() {
System.out.println("The current exec name is :" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.imooc.timer;
import java.util.Timer;
public class MyTimer {
public static void main(String[] args) {
//创建一个Timer实例
Timer timer=new Timer();
//创建一个MyTimerTask实例
MyTimerTask myTimerTask =new MyTimerTask("No.1");
//通过Timer定时定频率调用myTimerTask的业务逻辑
//即第一次执行是在当前时间的两秒之后,每隔一秒执行一次
timer.schedule(myTimerTask,2000L,1000L);
}
}
下面介绍一下Timer的定时函数:
schedule(task,time)
参数:
- task-所要安排的任务
- time-首次执行任务的时间
作用:
时间等于或超过time时首次执行task,且执行一次
schedule(task,time,period)
参数:
- task-所要安排的任务
- time-首次执行任务的时间
- period-执行一次task的时间间隔,单位是毫秒
作用:
时间等于或超过time时首次执行task,之后每隔period毫秒执行一次task
schedule(task,delay)
参数:
- task-所要安排的任务
- delay-等待执行任务的时间
作用:
等待delay毫秒后首次执行task,且只执行一次
schedule(task,delay,period)
参数:
- task-所要安排的任务
- delay-等待执行任务的时间
- period-执行一次task的时间间隔,单位是毫秒
作用:
等待delay毫秒后首次执行task,之后每隔period毫秒执行一次task
scheduleAtFixedRate(task,time,period)
作用:
时间等于或超过time时首次执行task,之后每隔period毫秒执行一次task
scheduleAtFixedRate(task,relay,period)
作用:
等待delay毫秒后首次执行task,之后每隔period毫秒执行一次task
Timer主要依靠时间点来触发,分为距离现在还有多长时间和指定具体的时间到点了触发。
Timer的其他函数:
cancel():取消所有任务
purge():返回取消的任务的个数,并将取消的任务从当前的队列移除。
TimerTask 的一些函数:
cancel():取消任务
scheduleExecutionTime() :返回整型的最近一次任务安排的时间