java自带定时器Timer

Timer介绍

直接用java自带的定时器比较方便,对于一些简单的项目可以使用,不需要多余的jar包引用,但同时,它没有丰富的执行表达式,扩展性较低。对于一些简单的项目是个很好的选择。
java.util.Timer
 Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。
java.util.TimerTask
 TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。

Timer的使用方法

Timer(); 创建一个新的计时器。
Timer(boolean isDaemon); 创建一个新的定时器,其相关线程可以指定为 run as a daemon 。
Timer(String name); 创建一个新的定时器,其相关线程具有指定的名称。
Timer(String name, boolean isDaemon); 创建一个新的定时器,其相关线程具有指定的名称,可以指定为 run as a daemon 。

isDaemon为true则作为守护进程,如果所属进程结束则不论守护进程有没有结束都直接退出。当JVM停止时,任何剩余的守护程序线程都被放弃:最后块不会被执行,堆栈也不会被解除 - JVM就会退出,使用要慎重。
定时器Timer的schedule方法,用来定义定时任务的执行规则方法如下,其中TimerTask是必须的参数,可以是一个类继承了TimerTask,然后重写run方法,或者直接用匿名内部类new TimerTask。任务不会重复执行,一次任务执行完毕,下一次任务才会开始。

Timer timer = new Timer();
timer.schedule(TimerTask task,Date time);//在特定时间执行任务,只执行一次
timer.schedule(TimerTask task,long delay);//在特定延迟(ms)之后执行任务,只执行一次
timer.schedule(TimerTask task,Date firstTime,long period);//指定第一次执行的时间,然后按照间隔时间,重复执行
timer.schedule(TimerTask task,long delay,long period);//在特定延迟之后第一次执行,然后按照间隔时间,重复执行
timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period);//指定第一次执行的时间,然后按照间隔时间,重复执行
timer.scheduleAtFixedRate(TimerTask task,long delay,long period);//在特定延迟之后第一次执行,然后按照间隔时间,重复执行

schedule()和scheduleAtFixedRate()区别

schedule(TimerTask task,Date firstTime,long period):schedule方法的延迟是从task任务结束的时间算,加上period延迟之后开始执行下一次任务。如果firstTime小于当前时间,则方法会直接开始执行一次,并且按照period的延迟规则执行后面的每一次任务。
scheduleAtFixedRate(TimerTask task,Date firstTime,long period):scheduleAtFixedRate是按照task开始的时间算,加上period延迟执行下一次任务,如果一次任务执行时间较长,下一次任务的时间已经到了,则下一次任务会排队等待,一旦上一次任务完成,则下一次任务马上开始。如果firstTime小于当前时间,则方法会立即执行多次来把当前时间之前没有执行的次数补全,之后才会按照period的延迟来执行。

Timer实现Demo

public class Test{
Timer timer = new Timer();
timer.schedule(new Task(), 0, 30*60*1000);
}


public class Task extends TimerTask {
@Override
    public void run() {
    System.out.println("定时任务执行");
    }
}

或者

public class Test{
Timer timer = new Timer();
 timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("定时任务执行");
            }
        },1000,1000);
}

定时器取消

//取消定时任务
timer.cancle();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值