定时任务Java编写综述之Java语言级的JDK自带API

定时任务Java编写综述

目前我所用过的定时任务机制主要分三类:OS级的Linux crontab命令方式、Java语言级的JDK自带API、第三方API接口如Quartz(当然,其他MVC框架如Spring基于Quartz实现了更人性化的API接口,此类接口一并归入Quartz类族)。

 

这三种方式相比,OS级不用专门开启监听器,占用系统资源较少,是定时任务首选的实现方式;JDK自带API主要是TimerTimeTask,这些API提供的接口功能简单,往往不能满足用户定时任务设置需要;QuartzJava语言编写的API,其可以单独部署,也可以作为系统的模块嵌入既有代码中,通过开启监听触发定时任务的方式实现,相对而言,特别是用此种方式开辟大量监听很耗资源。

 

下面分别介绍这三种常用的定时任务实现方式。

 

2. Java语言级的JDK自带API

java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks
一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。

完整的Timer如下:

java.util.Timer timer = new java.util.Timer(true);

【注】true 说明这个timerdaemon方式运行(优先级低,程序结束timer也自动结束),注意,javax.swing 中也有一个Timer类,如果import中用到swing包,要注意名字的冲突。

 

TimerTask task = new TimerTask() {

public void run() {

... //每次需要执行的代码放到这里面。

}

};

 

调度task的方法有:

timer.schedule(task, time);

// timeDate类型:在指定时间执行一次。

 

timer.schedule(task, firstTime, period);

// firstTimeDate类型,periodlong

// firstTime时刻开始,每隔period毫秒执行一次。

 

timer.schedule(task, delay)

// delay long类型:从现在起过delay毫秒执行一次

 

timer.schedule(task, delay, period)

// delaylong,periodlong:从现在起过delay毫秒以后,每隔period

// 毫秒执行一次。

 

完整的例子

由两个类组成,一个定制任务,一个调用java.util.Timer

定制任务:import java.util.Timer;

 

public class TimerTaskTest extends java.util.TimerTask{

public void run() {

// TODO Auto-generated method stub

System.out.println("start");

}

}

 

import java.util.Timer;  

public class TimerTaskTest extends java.util.TimerTask{  

  public void run() {  

   // TODO Auto-generated method stub   

   System.out.println("start");  

}  

}  

 

调用java.util.Timer

import java.util.Timer;

public class Test {

public static void main(String[] args){

Timer timer = new Timer();

timer.schedule(new TimerTaskTest(), 1000, 2000);

}

}

 

import java.util.Timer;  

public class Test {  

public static void main(String[] args){  

   Timer timer = new Timer();  

   timer.schedule(new TimerTaskTest(), 1000, 2000);  

}  

}  

根据上面的介绍,便可以在1秒后,每隔2秒执行一次程序

 

参考文献:http://blog.csdn.net/majian_1987/article/details/8730544

猜你喜欢

转载自aoyouzi.iteye.com/blog/1859929