定时器Timer 与 TimerTask

定时器在业务中有不可缺少的作用,根据业务需求来使用......

方式一

指定时间做某一件是,只执行一次

 //指定时间做某一件是,只执行一次
    public static void main(String[] args) throws ParseException {
        Timer mTimer = new Timer();
        String time = "2021-08-18 21:22:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse = sdf.parse(time);
        mTimer.schedule(new Test01(mTimer), parse);
    }

}


class Test01 extends TimerTask {

    Timer timer = null;

    public Test01() {
    }

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

    @Override
    public void run() {
        System.out.println("执行");
        //执行完任务后终止该计时器
        timer.cancel();
    }

 

方式二

在指定延迟后执行指定的任务,只执行一次

  //在指定延迟后执行指定的任务,只执行一次
    public static void main(String[] args) {
        Timer mTimer = new Timer();
        //延迟一秒后执行任务; 1000=1秒,单位:毫秒
        mTimer.schedule(new Test02(mTimer), 3000);
    }

}


class Test02 extends TimerTask {

    Timer timer = null;

    public Test02() {
    }

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

    @Override
    public void run() {
        System.out.println("执行");
        //执行完任务后终止该计时器
        timer.cancel();
    }

 

方式三

指定的任务在指定的延迟后开始进行重复的固定延迟执行:

    //指定的任务在指定的延迟后开始进行重复的固定延迟执行:
    public static void main(String[] args) {
        Timer mTimer = new Timer();
        //延迟一秒后执行任务,每个一秒执行一次
        mTimer.schedule(new Test03(), 0, 1000);
    }

}


class Test03 extends TimerTask {

    @Override
    public void run() {
        System.out.println("执行");
    }

 

附加

   public static void main(String[] args) {
        //Runnable:实现了Runnable接口,jdk就知道这个类是一个线程
        Runnable runnable = new Runnable() {
            //创建 run 方法
            public void run() {
                // task to run goes here
                System.out.println("Hello, stranger");
            }
        };
        // ScheduledExecutorService:是从Java SE5的java.util.concurrent里,
        // 做为并发工具类被引进的,这是最理想的定时任务实现方式。
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
        // 10:秒   5:秒
        // 第一次执行的时间为2秒,然后每隔1秒执行一次
        service.scheduleAtFixedRate(runnable, 2, 1, TimeUnit.SECONDS);
    }

 

方式四

指定延迟时间开始执行重复的操作(指定重复操作多少次后,再指定执行你想要的任务后停止定时器)

public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
int times = 0;

public void run() {
times = times + 1;
if (times >= 10) {
times = 0;
//一分钟后自动取消转单
timer.cancel();
}
log.info("Timer执行-->{}", times + "次");
}
}, 0, 1000);
}

 

Timer+TimerTask

 

public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time= "2022-07-27 10:13:44";
        try {
            Date parse = sdf.parse(time);
            System.out.println("达到此时间执行......" +parse);
            new Timer().schedule(new TimerTask(){
                public void run(){
                    System.out.println("task run...");
                    System.exit(0);
                }
            }, parse);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

 

posted @ 2021-08-19 09:41  安详的苦丁茶  阅读(111)  评论(0编辑  收藏  举报