定时器实现方式之TimerTaskTimer

Posted sweethoney

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时器实现方式之TimerTaskTimer相关的知识,希望对你有一定的参考价值。

在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了。定时器的实现方式有很多种,今天总结最简单的实现方式。java 1.3引入了定时器框架,用于在定时器上下文中控制线程的执行,其由类Timer和TimerTask构成。Timer适用于大规模并发调度定时任务,在内部,该类使用二进制的堆表示其定时任务队列。

通过继承TimerTask或者创建匿名类的方式重写run()方法,创建一个定时任务,通过将其作为第一个参数调用Timer得schedule()方法,实现定时器。

import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo {
    // 通过创建匿名类方式实现

    public static void main(String[] args) {
        
        // 首先初始化一个TimerTask的匿名子类
        TimerTask task = new TimerTask() {
@Override
public void run() { System.out.println("开始执行"); //退出程序返回最上层,0表示正常退出程序,非0表示非正常退出程序 System.exit(0); } }; //通过Timer调用 Timer timer = new Timer(); timer.schedule(task, 2000); } }

Timer创建的定时器一般为非线程守护,如果想要创建守护线程需调用Timer(boolean isDaemon) 传递参数true给isDaemon。

Timer类声明的方法如下:

  • void schedule(TimerTask task, long delay) 在delay毫秒之后调度任务执行。
  • void schedule(TimerTask task, Date time) 在某个时间点调度任务执行。
  • void schedule(TimerTask task, long delay, long period) 在delay毫秒之后调度任务开始执行,以固定时间间隔的方式重复执行,后续将一大约period毫秒的固定时间间隔执行。
  • void schedule(TimerTask task, Date firstTime, long period) 调度任务于firstTime开始,以固定时间间隔的方式重复执行,后续将一大约period毫秒的固定时间间隔执行。
  • void scheduleAtFixedRate(TimerTask task, long delay, long period) 在delay毫秒之后,开始调度任务以固定速率的方式重复执行,后续将以大约period毫秒数的固定时间间隔执行。
  • void scheduleAtFixedRate(TimerTask task, Date firstTime,long period) 调度任务于firstTime开始,以固定速率的方式重复执行,后续将大约period毫秒数的固定时间间隔执行。

  • sched(TimerTask task, long time, long period) 在指定时间执行调度任务执行,以固定时间间隔的方式重复执行,后续将一大约period毫秒的固定时间间隔执行。
  • void cancel() 终止定时器,丢弃所有当前调度的定时器任务。不干涉当前正在执行的任务,能保证正在执行的任务一定是最后一个被该定时器执行的任务。
  • int purge() 从该定时器队列中移除所有取消的定时任务并且返回被移除任务的数目。

 

以上是关于定时器实现方式之TimerTaskTimer的主要内容,如果未能解决你的问题,请参考以下文章

Java定时调度任务的实现

51系列小型操作系统精髓 简单实现

一个简单的时间片轮转内核代码的分析(课程作业)

论时间片与定时器

Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现

Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现