定时器Timer的使用
定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的技术.
Time类主要负责完成定时计划任务的功能,就是在指定的时间的开始执行某个任务.
Timer类的作用是设置计划任务,而封装任务内容的类是TimerTask类.此类是一个抽象类,继承需要实现一个run方法.
通过查文档我们看到Timer有以下几个构造函数:
Timer的方法以下这么多:
下面我们通过定时器来完成一个简单功能,就是在运行项目三秒后,在控制台打印出"您该起床了",来模拟一下闹钟的功能:
1 package com.wang.reflect; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 class MyTask extends TimerTask{ 7 8 @Override 9 public void run() { 10 System.out.println("您该起床了!!!!"); 11 } 12 } 13 public class TimerDemo { 14 public static void main(String[] args) { 15 //创建定时器对象 16 Timer t=new Timer(); 17 //在3秒后执行MyTask类中的run方法 18 t.schedule(new MyTask(), 3000); 19 20 } 21 }
运行后,我们发现三秒后控制台打印出了相当的文字,但是任务虽然执行完了,进程却没有销毁,还是呈红色状态,这是什么原因呢?
创建了一个Timer就相当于启动了一个新线程,这个新线程并不是守护线程,所以会一直运行.
在Time类和TimerTask类中都有一个cancel()方法.
TimerTask类中的作用是:将自身从任务队列中清除,(一个Timer对象可以执行多个Timertask任务)
Timer类中的作用是:将任务队列中的全部任务清空.
下面写一个实例,定时删除指定磁盘某个目录下的所有文件:
1 package com.wang.reflect; 2 3 import java.io.File; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.Timer; 8 import java.util.TimerTask; 9 10 11 class MyTask extends TimerTask{ 12 /** 13 * 定时删除指定位置的文件,(这里以删除f盘下aa文件夹的所有文件为例) 14 */ 15 @Override 16 public void run() { 17 File file=new File("f://aa"); 18 deleteFolder(file); 19 20 } 21 public void deleteFolder(File file){ 22 File[] files=file.listFiles(); 23 for(File f:files){ 24 if(f.isDirectory()){ 25 //使用递归 26 deleteFolder(f); 27 }else{ 28 f.delete(); 29 } 30 } 31 file.delete(); 32 } 33 34 } 35 public class TimerDemo { 36 37 public static void main(String[] args) throws ParseException { 38 //创建定时器对象 39 Timer t=new Timer(); 40 String time="2016-04-04 11:26:40"; 41 Date d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time); 42 t.schedule(new MyTask(), d); 43 } 44 }