在JDK库中,Timer类主要负责计划任务的功能,即在指定的时间开始执行某一个任务。Timer类负责设置任务计划,TimerTask类负责封装任务,执行任务的代码要放到TimerTask的子类中。
方法schedule(TimerTask task,Date time)的使用
①在指定的日期执行一次某一任务
public class MyTask extends TimerTask { public void run() { System.out.println("运行了,在"+ new Date()); } }public class Run { private static Timer timer = new Timer(); public static void main(String [] args) { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = "2016-03-06 20:00:00"; Date date = sdf.parse(time); timer.schedule(task, date); }}
但是注意,在执行完计划任务之后,进程仍一直处于运行状态。因为创建一个Timer对象就是启动一个新的线程,而且这个新的线程并不是守护线程,他会一直运行。
②下面将以上的任务改为守护线程,执行完任务后就销毁。
public class MyTask extends TimerTask { public void run() { System.out.println("运行了,在"+ new Date()); } }public class Run { private static Timer timer = new Timer(true); public static void main(String [] args) { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = "2016-03-06 20:00:00"; Date date = sdf.parse(time); timer.schedule(task, date); }}
③如果计划时间早于当前时间,则会立即执行任务
④Timer中允许有多个TimerTask任务。TimerTask是以队列的方式一个一个被顺序执行的,所以执行时间可能与预期有差距。
方法schedule(TimerTask task, Date fistTime, long period)的使用
在指定的日期后,按指定的间隔周期的无限循环执行某一任务。
TimerTask类的cancel()方法用于将自身从重复执行队列中清除。而Timer中cancel()方法用于将任务队列中的全部任务都清除。