线程 —— 定时器介绍

时间:2022-02-06 00:12:09

TimerTask 是一个抽象类,实现 TimerTask 的 run 方法。

示例 1:

/** * Created by liwei on 16/7/19. */
/* * 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。 * 依赖Timer和TimerTask这两个类: * Timer:定时 * public Timer() * public void schedule(TimerTask task,long delay) * public void schedule(TimerTask task,long delay,long period) * public void cancel() * TimerTask:任务 */
public class TimeDemo {

    public static void main(String[] args) {
        // 创建定时器对象
        Timer timer = new Timer();

        // 3 秒以后执行任务
        timer.schedule(new MyTask(timer),3*1000);
    }

}

// 做一个任务
class MyTask extends TimerTask{
    // 为了控制定时器结束,将 Timer 作为成员变量
    private Timer timer;

    public MyTask(){}

    public MyTask(Timer timer){
        this.timer = timer;
    }

    @Override
    public void run() {
        System.out.println("beng,爆炸了");
        // 结束任务
        timer.cancel();
    }
}

示例2:

public class TimeDemo2 {
    public static void main(String[] args) {
        Timer timer =new Timer();
        // 5 秒以后执行任务,每隔 2 秒(周期)再执行一次
        timer.schedule(new MyTask2(),5*1000,2*1000);
    }
}

// 做一个任务
class MyTask2 extends TimerTask{

    @Override
    public void run() {
        System.out.println("任务正在执行 --- ");
    }
}

示例3:
递归地删除目录

/** * Created by liwei on 16/7/19. * * 递归删除目录:在指定的时间内删除我们指定的目录 */
class DeleteFolder extends TimerTask{

    @Override
    public void run() {
        File srcFolder = new File("demo");
        deleteFolder(srcFolder);
    }
    // 递归删除目录
    private void deleteFolder(File srcFolder) {
        File[] fileList = srcFolder.listFiles();
        if(fileList!=null){
            for(File file:fileList){
                if(file.isDirectory()){
                    deleteFolder(file);
                }else {
                    Boolean ifDelete = file.delete();
                    String fileName = file.getName();
                    System.out.println("文件 " + fileName + "是否删除成功:" + ifDelete);
                }
            }
            System.out.println(srcFolder.getName() + "删除根文件夹是否成功:" + srcFolder.delete());
        }
    }
}

public class TimerTest {

    public static void main(String[] args) throws ParseException{
        Timer timer = new Timer();
        String s = "2016-07-19 00:00:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(s);
        // 在指定的时间递归地删除一个文件夹
        timer.schedule(new DeleteFolder(),date);
    }
}