定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。我们可以在指定的事件做某件事情,可以通过Timer和TimerTask类来实现定义调度的功能
java.util Timer类:定时
public Timer():创建一个新计时器
public void schedule(TimerTask task, long delay):安排在指定延迟后执行指定的任务。
public void schedule(TimerTask task,long delay,long period):安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
java.util TimerTask类:由 Timer 安排为一次执行或重复执行的任务。
public abstract void run(): 此计时器任务要执行的操作。
public boolean cancel():取消此计时器任务
开发中Quartz是一个完全由java编写的开源调度框架。
事例一:只执行一次任务的示例:
public class TimerDemo {
public static void main(String[] args) {
//创建定时器对象
Timer timer = new Timer();
//2秒后执行任务,任务结束后就取消
timer.schedule(new MyTask(timer), 2000);
}
}
// 任务
class MyTask extends TimerTask{
private Timer t;
public MyTask() {
}
public MyTask(Timer t) {
this.t = t;
}
@Override
public void run() {
System.out.println("come on,做任务");
t.cancel();
}
}
事例二:第一次执行任务后,之后每隔多久后重复执行任务
public class TimerDemo {
public static void main(String[] args) {
//创建定时器对象
Timer timer = new Timer();
//3秒后执行第一次任务,之后每隔2秒后在执行任务
timer.scheduleAtFixedRate(new MyTask(),3000 , 2000);
}
}
// 任务
class MyTask extends TimerTask{
@Override
public void run() {
System.out.println("come on,做任务");
}
}
事例三:在指定时间删除指定目录下的所有文件:
public class TimerTest {
public static void main(String[] args) throws ParseException {
Timer timer = new Timer();
//指定一个时间
String s = "2017-09-30 18:15:55";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = format.parse(s);
//在指定时间调用任务
timer.schedule(new DeleteFolder(), d);
}
}
//创建定时任务
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{
file.delete(); //如果是一个文件,就直接删除
}
}
srcFolder.delete(); //删除主文件夹
}
}
}