Timer和TimerTask

本文介绍了Java中的Timer和TimerTask类,它们用于任务调度。Timer内部维护了一个任务队列,按照最小堆的方式排列任务。TimerTask的cancel方法用于取消单个任务执行。此外,文章讨论了Timer的构造方法、调度方法以及如何终止Timer线程,包括将其设置为守护线程、调用System.exit或使用TimerTask的cancel方法。
摘要由CSDN通过智能技术生成


参考文章

1 概述

Timer 就是一个调度器,TimerTask 是一个实现了 run() 方法 的 一个类,具体的 TimerTask 需要自己来实现

Timer timer = new Timer();

timer.schedule(new TimerTask() {
   
    public void run() {
   
        System.out.println("abc");
    }
},20000,1000);
  1. Timer 的 执行流程

一个 Timer内部,包装了 一个 Thread一个 Task队列。这个队列按照 最小堆 的方式对任务进行排列;而包含的线程在 Timer的 构造方法 调用时被启动,这个 Thread 的 run()方法 无限循环这个 Task队列。若队列为空且没有调用Timer的cancel方法,此时会一直等待,也就是死循环;如果等待完成后,队列为空,则认为发生了cancel从而跳出死循环,结束任务;循环中如果发现任务需要执行的时间小于系统时间,则需要执行,那么根据任务的时间片从新计算下次执行时间,若时间片为0代表只执行一次,则直接移除队列即可。

  1. TimerTask的 cancel()方法

TimerTask 的 cancel()方法 是取消单个任务的执行,即将其状态置为CANCELLED,这样在调用Timer的purge方法时,会将任务队列中状态为CANCELLED的任务清除,并对最小堆进行重排序

  1. 任务队列的实现

任务队列是用 最小堆 实现的,具体是:用一个数组实现最小堆,下标从1开始

2 Timer 的 常见方法
  1. public void schedule(TimerTask task, long delay)

这个方法是调度一个task,经过delay(ms)后开始进行调度,仅仅调度一次

  1. public void sch
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值