定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在Java中,可以通过Timer和TimerTask类来实现定义调度的功能
开发中 Quartz是一个完全由java编写的开源调度框架。
定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。
依赖Timer和TimerTask这两个类: TimerTask:任务类 Timer:定时类 A、public Timer() 创建一个新计时器。 B、public void schedule(TimerTask task,long delay) 安排在指定延迟后执行指定的任务。 C、public void schedule(TimerTask task,long delay,long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。 D、public void schedule(TimerTask task,Date time) 安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。 E、public void cancel() 终止此计时器,丢弃所有当前已安排的任务。
例子1:A+B+E
1 public class TimerDemo1 { 2 public static void main(String[] args) { 3 4 5 //创建定时器对象 6 Timer t = new Timer(); 7 8 // 安排在指定延迟后执行指定的任务。 9 //t.schedule(new MyTask(), 2000);10 11 //我想要在执行完任务后就停止运行12 t.schedule(new MyTask(t), 2000);13 }14 }15 //建立所要执行的任务16 class MyTask extends TimerTask{17 //用构造方法初始化定时器对象t18 private Timer t;19 public MyTask(){}20 public MyTask(Timer t){21 this.t = t;22 }23 @Override24 public void run() {25 System.out.println("爆炸");26 t.cancel();27 }28 }
例子2:A+C+E
1 /* 2 在指定时间执行一次任务,期后每隔特定时间就执行一次 3 */ 4 public class TimerDemo2 { 5 6 public static void main(String[] args) { 7 // 创建定时器对象 8 Timer t = new Timer(); 9 10 // 在指定时间执行一次任务,期后每隔特定时间就执行一次11 t.schedule(new MyTask1(), 3000, 2000);12 13 }14 }15 16 // 创建任务17 class MyTask1 extends TimerTask {18 @Override19 public void run() {;20 System.out.println("爆炸");21 22 }23 }
例子3:指定时间执行任务(指定时间删除目录)
1 /* 2 需求:在指定的时间删除指定目录 demo 3 */ 4 public class TimerTest { 5 6 public static void main(String[] args) throws ParseException { 7 // 创建定时器对象 8 Timer t = new Timer(); 9 // 设定在10:38:40 进行删除10 String s = "2016-10-12 10:38:40";11 // 把字符串s解析为日期12 SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");13 // String - Date 进行解析 public Date parse(String source);14 Date d = date.parse(s);15 16 // 进行定时器任务17 t.schedule(new Delete(), d);18 19 }20 }21 // 创建任务22 class Delete extends TimerTask {23 24 public void run() {25 // 封装目录26 File file = new File("demo");27 // 删除28 DeleteFile(file);29 }30 31 // 删除目录32 public void DeleteFile(File file) {33 // 获取目录中的所有文件或文件夹的名称集合34 File[] allfile = file.listFiles();35 36 // 遍历集合37 if (allfile != null) { // 目录不为空38 for (File f : allfile) {39 if (f.isDirectory()) {40 // 如果是文件夹,就重新获取名称集合并遍历41 DeleteFile(f); 42 } else {43 //如果是文件,就删除。44 System.out.println(f.getName()+ f.delete());45 }46 }47 System.out.println(file.getName() + file.delete());48 }49 }50 }