定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在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 //用构造方法初始化定时器对象t
18 private Timer t;
19 public MyTask(){}
20 public MyTask(Timer t){
21 this.t = t;
22 }
23 @Override
24 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 @Override
19 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 }