设置定时任务(Timer类的介绍)
在我们的很多项目中,我们都须要用到定时任务,因此想借此博文来对定时任务进行一个介绍。
设置定时任务过程例如以下:
- 先new一个Timer对象 Timer timer = new Timer() ;
- 然后调用它的schedule方法,比如:timer.schedule(new Task(), 5 * 1000,5*1000);
相信上面的代码我们不会陌生,即使我们没有写过,但我们一定见到过。
要注意的是:上面第二步所提到的schedule方法有四个重载的方法。以下进行一一介绍
- public void schedule(TimerTask task,long delay)
- public void schedule(TimerTask task,long delay,long period)
- public void schedule(TimerTask task,Date time)
- public void schedule(TimerTask task,Date firstTime,long period)
1)public void schedule(TimerTask task,long delay)
这是一个TimerTask对象,确切点说是一个实现TimerTask的类的对象,由于TimerTask是个抽象类。我们自己定义的MyTask必须实现TimerTask的方法run。将我们想要运行的任务就在这个run方法里面。比如:我们有例如以下的MyTask类继承TimerTask,任务仅仅是简单的一个输出
import java.util.TimerTask;public class MyTask extends TimerTask { public void run() { System.out.println("我们的定时任务运行了"); }}
上面函数中的第二个參数(long delay)表示延迟多长时间開始运行;须要说明的是:这个long型的值是毫秒数,则 5*1000表示延迟5秒钟
比如:例如以下的代码,就是表示以下程序启动后延时 5秒后运行任务MyTaskimport java.util.Timer;public class MyTimeTask { public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new MyTask(), 5 * 1000); }}
2)public void schedule(TimerTask task,long delay,long period)
- 前段时间在我们的项目中就遇到过,情形例如以下 我们须要将心电图採集设备採集到的数据实时的发送到我们的手机的app上面进行画图显示出来。
因此我们须要一个定时任务来反复的在缓存中进行数据的读取。
则上面这个重载函数就能帮我们解决这种问题。
上面这个函数的第一个和第二个參数与前面介绍的全然一样。第三个參数表示的就是我们任务反复运行的间隔时间,即我们的任务每隔period时间就运行一次。
比如:假设我们希望我们的任务每5秒钟运行一次,就将第三个參数这样写就可以:5*1000;
就像我们在博文开头写的那行代码 timer.schedule(new Task(), 5 * 1000。5*1000);的意思就是表示当我们的程序启动后延迟5秒钟后開始运行我们指定的任务,之后每隔5秒钟反复运行一次。欧了。
上面介绍的两个基本上时最经常使用的了,可是。当我们想要将我们的某个任务(比如生日祝福)在2015年6月24日0时0分
运行时。上面的两个函数就不可以完毕了,由于我们不知道程序什么时候启动。就不无法确定须要延时多长时间才干到达我们指定的时间,
只是我们还有另外两个函数。以下一一介绍
3)public void schedule(TimerTask task,Date time)
- 第一种:程序启动的时间在我们设定的时间之前,比如:2015年6月1日。则我们程序运行要我们指定的时间就会运行我们所指定的任务。
- 另外一种:程序启动的时间在我们设定的时间之后。比如:2015年7月1日0时0分。则当我们的程序刚启动的时候,我们指定的任务就马上运行。
4)schedule最后一个重载的方法是
public void schedule(TimerTask task,Date firstTime,long period)
与第三个函数相比,多了一个反复运行任务的间隔时间,与第二个函数相似。这里不再介绍。相信通过前面这么多的介绍,这个函数的各个參数就比較好理解了。
总结
- 定时任务总的来说是比較简单的,仅仅要你了解了schedule四个重载函数。以及每一个重载函数的各个參数的含义,然后就行正确的使用了