定时器
是一个应用十分广泛的线程工具, 可用于调度多个定时任务以后台线程的方式执行。
在Java中,可以通过Timer和TimerTask类来实现定义调度的功能
Timer()
//创建一个新的计时器。
void schedule(TimerTask task, long delay)
//在指定的延迟之后安排指定的任务执行。
void schedule(TimerTask task, long delay, long period)
//在指定 的延迟之后开始 ,重新执行 固定延迟执行的指定任务。
void cancel()
//终止此计时器,丢弃任何当前计划的任务。
TimerTask :任务
public class TimerDemo { public static void main(String[] args) { //创建定时器对象 Timer timer = new Timer(); //在指定的延迟(3000毫秒)之后安排指定的任务(MyTask)执行 timer.schedule(new MyTask(timer),3000); } } class MyTask extends TimerTask{ private Timer timer; public MyTask(){ } public MyTask(Timer timer){ this.timer=timer; } @Override public void run() { System.out.println("beng!!!爆炸了!"); timer.cancel(); } }
public class TimerDemo2 { public static void main(String[] args) { Timer timer = new Timer(); //在指定延迟之后开始,重新执行固定延迟执行的指定任务 timer.schedule(new MyTask2(),3000,2000); } } class MyTask2 extends TimerTask{ @Override public void run() { System.out.println("beng!!!爆炸了!"); try { FileReader fr = new FileReader( "D:\\IdeaProjects\\bigdata13\\src\\com\\shujia\\java\\day22\\a1.txt"); BufferedReader br = new BufferedReader(fr); String s = br.readLine(); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } }
public class TimerTest { public static void main(String[] args) throws ParseException { Timer timer = new Timer(); String s="2021-10-27 15:33:20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date data = sdf.parse(s); //指定时间调度任务删除目录 timer.schedule(new DeleteFolder(timer),data); } } class DeleteFolder extends TimerTask { private Timer timer; public DeleteFolder(Timer timer){ this.timer=timer; } @Override public void run() { File file = new File("D:\\IdeaProjects\\bigdata13\\src\\data"); deleteFile(file); timer.cancel(); } //写一个方法递归删除目录 public void deleteFile(File file){ File[] files = file.listFiles(); if(files!=null){ for (File file1 : files) { if(file1.isDirectory()){//如果是目录 deleteFile(file1);//递归调用deleteFile(File file)删除目录 }else{//如果是文件,file.delete直接删除 System.out.println(file1.getName()+"-----"+file1.delete()); } } //此时目录file已为空,直接删除 System.out.println(file.getName()+"----"+file.delete()); } } }