定时器–概念简介
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。在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编写的开源调度框架。
示例1:实现定时输出信息到控制台
A:先创建一个类 MyTimerTask 继承 TimerTask 类,在run方法中写入要执行的代码
这里我们为TimerTask指定的任务是:在控制台上打印一行内容
注意:为了在该定时器执行条件完成之后能够取消任务,通过构造函数传入Timer定时器的引用
在执行5次之后完成取消任务的操作(cancel)
class MyTimerTask extends TimerTask {
private int sum = 0;
private Timer timer;
public MyTimerTask(Timer t1) {
this.timer = t1;
}
@Override
public void run() {
//在第5次之后结束执行timer
if(sum==5){
timer.cancel();
}else{
System.out.println("炸电脑!!!! bong ~~~");
sum++;
}
}
}
B 定时任务的演示
- 1.延迟某一时间后的爆炸
schedule(TimerTask task, long delay)
参数:
task--要执行的人物对象
delay--任务启动后延迟多长时间执行
- 2.延迟某一时间并在固定时间多次爆炸
schedule(TimerTask task, long delay, long period)
参数:
task--要执行的人物对象
delay--任务启动后延迟多长时间执行
period--每间隔多长时间继续执行
演示:
public class TimerDemo {
public static void main(String[] args) {
// 创建timer对象
Timer t1 = new Timer();
// A.3秒后执行一次
// t1.schedule(new MyTimerTask(), 3000);
// B 5秒之后开始执行,之后每隔3秒再重复执行,执行次数总共为5次
t1.schedule(new MyTimerTask(t1), 5000, 2000);
}
}
示例2:实现定时删除指定文件夹及其所有文件
public class TimerDemo2 {
/**
* 定时删除指定目录下的所有文件
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
String date = "2016-12-15 20:37:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(date);
Timer t = new Timer();
t.schedule(new DeleteFolder(), d);
}
}
/**
* 定时删除指定目录以及文件
* @author llj
*
*/
class DeleteFolder extends TimerTask{
@Override
public void run() {
File srcFolder = new File("demo");
deleteFolder(srcFolder);
}
//递归删除某一目录下的所有文件以及文件夹
public void deleteFolder(File srcFolder) {
//以数组形式获取文件目录
File[] fileArray = srcFolder.listFiles();
if(fileArray!=null){
for(File file : fileArray){
//判断是否是一个目录,如果是目录,则递归
if(file.isDirectory()){
deleteFolder(file);
}else{
System.out.println("deleting file: "+file.getName()+":"+file.delete());
}
}
System.out.println("deleting folder: "+srcFolder.getName()+":"+srcFolder.delete());
}
}
}