Timer
1.概述:一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行
2.构造方法:
(1)public Timer()创建一个新计时器
(2)public Timer(String name)创建一个新计时器,并指定名称
(3)public Timer(boolean isDaemon)创建一个新计时器,可指定其相关线程作为守护线程运行
3.成员方法:
(1)public void schedule(TimerTask task,Date time)安排在指定的时间执行指定的任务
(2)public void schedule(TimerTask task, long delay)在多少毫秒后执行指定任务
(3)public void schedule(TimerTask task, long delay, long period)
(2)public void schedule(TimerTask task, long delay)在多少毫秒后执行指定任务
(3)public void schedule(TimerTask task, long delay, long period)
在多少毫秒后,执行任务,并且每个多少毫秒重复执行
(4)public void cancel()终止此计时器,丢弃所有当前已安排的任务
(4)public void cancel()终止此计时器,丢弃所有当前已安排的任务
TimerTask(抽象类,实现Runnable接口)
1.概述:由 Timer 安排为一次执行或重复执行的任务
2.成员方法:
(1)run()此计时器任务要执行的操作
注:此类为抽象类,不能直接实例化
例:schedule(TimerTask task, long delay)三秒后执行“爆炸了”操作
import java.util.Timer;
import java.util.TimerTask;
// 测试类
public class TimerDemo {
public static void main(String[] args) {
// 创建一个新计时器
Timer timer = new Timer();
// 三秒后执行操作
timer.schedule(new MyTimerTask(timer), 3000) ;
}
}
// 自定义类实现TimerTask
class MyTimerTask extends TimerTask{
private Timer timer;
public MyTimerTask() {
}
public MyTimerTask(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
// 执行操作
System.out.println("爆炸了!");
// 终止此计时器
timer.cancel();
}
}
注:cancel() 方法只能Timer使用,所以创建MyTimerTask有参构造,传入Timer来使用cancel() 方法
例2:三秒后执行“爆炸了”任务,并且每隔两秒执行一次
使用schedule(TimerTask task, long delay, long period) 方法
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo1 {
public static void main(String[] args) {
// 创建定时器对象
Timer t = new Timer();
// 调用方法
t.schedule(new MyTask(), 3000, 2000);
}
}
class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("爆炸了!");
}
}
练习:在指定的时间递归删除Q盘aa目录下的所有文件和文件夹
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
// 测试类
public class TimerTest {
public static void main(String[] args) throws ParseException {
// 创建一个定时器对象
Timer t = new Timer();
// 定义一个文本日期格式
String dateStr = "2017-12-6 19:46:00";
// 解析成Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 解析方法
Date date = sdf.parse(dateStr);
// 调用定时器在规定时间内执行某个任务的方法
t.schedule(new DeleteFolder(), date);
}
}
// 自定义TimerTask类删除文件夹
class DeleteFolder extends TimerTask {
@Override
public void run() {
// 封装当前项目下的这个demo文件
File srcFolder = new File("Q:\\aa");
deleteFolder(srcFolder);
}
// 递归删除方法
private void deleteFolder(File srcFolder) {
// 获取当前srcFolder下面的所有的文件以及文件夹的File数组
File[] fileArray = srcFolder.listFiles();
// 对该对象非空判断
if (fileArray != null) {
// 增强for遍历
for (File file : fileArray) {
// 继续判断file对象是否是文件夹
if (file.isDirectory()) {
// 继续回到删除目录的方法
deleteFolder(file);
} else {
// 不是目录,是文件,直接删除
System.out.println(file.getName() + "---" + file.delete());
}
}
System.out.println(srcFolder.getName() + "----" + srcFolder.delete());
}
}
}