Android(java)学习笔记16:多线程 - 定时器概述和使用
1. 定时器:
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在Java中,可以通过Timer和TimerTask类来实现定义调度的功能
Timer
public Timer()
public void schedule(TimerTask task, long delay)
public void schedule(TimerTask task,long delay,long period)
TimerTask---抽象类
public abstract void run()
public boolean cancel()
开发中 Quartz是一个完全由java编写的开源调度框架。
2. 下面我们用于代码示例进行讲解:
public void schedule(TimerTask task, long delay)
1 package cn.itcast_12; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 /* 7 * 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。 8 * 依赖Timer和TimerTask这两个类: 9 * Timer:定时 10 * public Timer() 11 * public void schedule(TimerTask task,long delay) 12 * public void schedule(TimerTask task,long delay,long period) 13 * public void cancel() 14 * TimerTask:任务 15 */ 16 public class TimerDemo { 17 public static void main(String[] args) { 18 // 创建定时器对象 19 Timer t = new Timer(); 20 // 3秒后执行爆炸任务 21 // t.schedule(new MyTask(), 3000); 22 //结束任务 23 t.schedule(new MyTask(t), 3000); 24 } 25 } 26 27 // 做一个任务 28 class MyTask extends TimerTask { 29 30 private Timer t; 31 32 public MyTask(){} 33 34 public MyTask(Timer t){ 35 this.t = t; 36 } 37 38 @Override 39 public void run() { 40 System.out.println("beng,爆炸了"); 41 t.cancel(); // 保证 TimerTask中run任务执行完毕,才能取消定时器。因此我们这里才会在这个位置使用Timer的cancel方法 42 } 43 44 }
public void schedule(TimerTask task,long delay,long period)
1 package cn.itcast_12; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 /* 7 * 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。 8 * 依赖Timer和TimerTask这两个类: 9 * Timer:定时 10 * public Timer() 11 * public void schedule(TimerTask task,long delay) 12 * public void schedule(TimerTask task,long delay,long period) 13 * public void cancel() 14 * TimerTask:任务 15 */ 16 public class TimerDemo2 { 17 public static void main(String[] args) { 18 // 创建定时器对象 19 Timer t = new Timer(); 20 // 3秒后执行爆炸任务第一次,如果不成功,每隔2秒再继续炸 21 t.schedule(new MyTask2(), 3000, 2000); 22 } 23 } 24 25 // 做一个任务 26 class MyTask2 extends TimerTask { 27 @Override 28 public void run() { 29 System.out.println("beng,爆炸了"); 30 } 31 }
3. 定时删除指定带内容的目录
1 package cn.itcast_12; 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 * 需求:在指定的时间删除我们的指定目录(你可以指定c盘,但是我不建议,我使用项目路径下的demo) 12 */ 13 14 class DeleteFolder extends TimerTask { 15 16 @Override 17 public void run() { 18 File srcFolder = new File("demo"); 19 deleteFolder(srcFolder); 20 } 21 22 // 递归删除目录 23 public void deleteFolder(File srcFolder) { 24 File[] fileArray = srcFolder.listFiles(); 25 if (fileArray != null) { 26 for (File file : fileArray) { 27 if (file.isDirectory()) { 28 deleteFolder(file); 29 } else { 30 System.out.println(file.getName() + ":" + file.delete()); 31 } 32 } 33 System.out.println(srcFolder.getName() + ":" + srcFolder.delete()); 34 } 35 } 36 } 37 38 public class TimerTest { 39 public static void main(String[] args) throws ParseException { 40 Timer t = new Timer(); 41 42 String s = "2014-11-27 15:45:00"; 43 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 44 Date d = sdf.parse(s); 45 46 t.schedule(new DeleteFolder(), d); 47 } 48 }