Java时间类库Timer的使用方法与实例详解

发布时间:2020-08-26 21:52:14 作者:七弦桐
来源:脚本之家 阅读:137

使用 Java 来调度定时任务时,我们经常会使用 Timer 类搞定。Timer 简单易用,在一些业务场景下用来实现简单定时调度。

Jave时间类库Timer简单使用

  1. 创建Timer对象
  2. 编写 自己的 task 类,该类集成 TimerTask,重写 run 方法,把要定时执行的逻辑写在里面
  3. 使用 Timer 执行 TimerTask
// 5秒后开始执行,每秒执行一次
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    public void run() {
      System.out.println("hello world");
    }
}, 50000 , 1000);

Timer 里面的一些常用方法

经过delay(ms)后开始进行调度,仅仅调度一次。

public void schedule(TimerTask task, long delay)

在指定的时间点time上调度一次

public void schedule(TimerTask task, Date time)

在delay(ms)后开始调度,每次调度完后,最少等待period(ms)后才开始调度

public void schedule(TimerTask task, long delay, long period)

在到了指定时间后开始调度,每次调度完后,最少等待period(ms)后才开始调度。

public void schedule(TimerTask task, Date firstTime, long period)

在delay(ms)后开始调度,然后每经过period(ms)再次调度。

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

schedule方法的区别在于:

schedule在计算下一次执行的时间的时候,是通过当前时间(在任务执行前得到) + 时间片,而scheduleAtFixedRate方法是通过当前需要执行的时间(也就是计算出现在应该执行的时间)+ 时间片,前者是运行的实际时间,而后者是理论时间点。比如:

在到了指定时间后开始调度,每次调度完后,最少等待period(ms)后才开始调度。

public void scheduleAtFixedRate(TimerTask task, Date firstTime,long period)

内部结构

Timer 类里包含一个任务队列和一个异步轮询线程。任务队列里容纳了所有待执行的任务,所有的任务将会在这一个异步线程里执行,切记:

public class Timer {
  private final TaskQueue queue = new TaskQueue();
  private final TimerThread thread = new TimerThread(queue);
}

Timer 的任务队列 TaskQueue 是一个特殊的队列,它内部是一个数组。这个数组会按照待执行时间进行堆排序,堆顶元素总是待执行时间最小的任务。

更多关于Jave时间类库Timer的使用方法与实例请查看下面的相关链接

推荐阅读:
  1. java类库的使用方法
  2. C++ 中时间与时间戳的转换实例详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java timer tim

上一篇:浅谈Docker数据持久化

下一篇:浅谈webpack下的AOP式无侵入注入

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》