定时任务就是在指定时间执行程序,或周期性执行计划任务。Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求。
一、Timer和TimerTask
Timer和TimerTask可以作为线程实现的第三种方式(前两种详见《Java多线程基础》),JDK1.5之后定时任务推荐使用ScheduledThreadPoolExecutor。
1、快速入门
Timer运行在后台,可以执行任务一次,或定期执行任务。TimerTask类继承了Runnable接口,因此具备多线程的能力。一个Timer可以调度任意多个TimerTask,所有任务都存储在一个队列中顺序执行,如果需要多个TimerTask并发执行,则需要创建两个多个Timer。
一个简单使用Timer的例子如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerTest { //被执行的任务必须继承TimerTask,并且实现run方法 static class MyTimerTask1 extends TimerTask { public void run() { System.out.println("爆炸!!!"); } } public static void main(String[] args) throws ParseException { Timer timer = new Timer(); //1、设定两秒后执行任务 //timer.scheduleAtFixedRate(new MyTimerTask1(), 2000,1000); //2、设定任务在执行时间执行,本例设定时间13:57:00 SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date time = dateFormatter.parse("2014/02/11 14:40:00"); timer.schedule(new MyTimerTask1(), time); } }