在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了。定时器的实现方式有很多种,今天总结最简单的实现方式。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() 从该定时器队列中移除所有取消的定时任务并且返回被移除任务的数目。

定时任务都是抽象类TimerTask子类的实例,这些子类实现Runnable接口,当子类实例化TimerTask的时候,需要重写其voud run()方法。

TimerTask类声明的方法如下:

  • boolean cancel()取消这个定时任务
  • long scheduledExecutionTime() 返回此定时任务最近实际被调度执行时间。

Timer的cancel()和TimerTask的TimerTask的区别在于,Timer的cancel()会终止定时器并放弃当前任意被调度的定时任务,而TimerTask的cancel()方法仅仅会取消正在调度的定时任务。

定时器实现方式之TimerTask、Timer的更多相关文章

  1. 以+scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?

    这里强调一点:在主线程中以+scheduledTimerWithTimeInterval...的方式触发的timer默认是运行在NSDefaultRunLoopMode模式下的,当滑动页面上的列表时, ...

  2. STM32F103ZET6 用定时器级联方式输出特定数目的PWM

    STM32F103ZET6 用定时器级联方式输出特定数目的PWM STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5.TIM8,共6个. 这里需要使用定时器的级联功能,ST ...

  3. 115、定时器(TimerTask+Timer+Handler)

    public class TimerUtils { public static Activity act; public static List<MaiDianModels> listMa ...

  4. 两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz

    1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportT ...

  5. Java Timer, TimerTask, Timer.Schedule

    schedule的意思(时间表.进度表) timer.schedule(new TimerTask(){ void run()},0, 60*60*1000);timer.schedule(new M ...

  6. 定时器篇---java.util.TimerTask和quartz

    最近项目中出现了定时执行任务的东西,研究了一下,觉得挺不错的,以后还用得到,就总结了下. 这里只介绍两种java.util.Timer 和 quartz java.util.Timer java自带的 ...

  7. STM32F103ZET6 用定时器级联方式输出特定数目的PWM(转载)

    STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5.TIM8,共6个.这里需要使用定时器的级联功能,ST的RM0008 REV12的P388和P399页上有说明对于特定的定 ...

  8. Demonstrating One-Shot Execution TimerTask Timer

    Listing -. Demonstrating One-Shot Execution import java.util.Timer; import java.util.TimerTask; publ ...

  9. Camunda定时器事件示例Demo(Timer Events)

    ​Camunda定时器事件(Timer Events)是由定义的计时器触发的事件.它们可以用作启动事件.中间事件或边界事件.边界事件可以中断,也可以不中断. Camunda定时器事件包括:Timer ...

随机推荐

  1. PHP开发微信公众号(二)消息接受与推送

    上一篇文章我们知道怎么获取二维码,这样别人就可以扫描二维码来关注我们,但是别人关注后,发送消息,我们怎么进行相关处理? 这里我们就来学习下怎么处理处理这些消息,以及推送消息. 学习之前首先你需要有一个 ...

  2. 2016级算法第五次上机-F.ModricWang的水系法术

    1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...

  3. 976 AlvinZH想回家(背包DP大作战T)

    976 AlvinZH想回家 思路 如果在第i小时有一些飞机延误,那么一架飞机的c值越大,这一小时产生的损失也越大.而使这一小时产生的损失尽可能的小并不会导致接下来时间产生的损失增大.因此应当每一小时 ...

  4. Linx 的组管理和权限管理

    Linux组基本介绍 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件 有所有者.所在组.其它组的概念. 1) 所有者 2) 所在组 3) 其它组 4) 改变用户所在的组 ...

  5. 干掉Vivado幺蛾子(1)-- Xilinx Tcl Store

    目录 1. 安装Xilinx Tcl Store 2. 手动更新 2.1 下载库 2.2 修改环境变量 参考文献: 最近在跟着高亚军老师的分析文章来学习Xilinx最近发布的<UltraFast ...

  6. Android Studio Gradle下载的包在哪里?

    C:\Users\Administrator\.gradle\caches\modules-2\files-2.1

  7. Comparación para 2019 Nueva Lonsdor K518S y K518ISE

    Comparación para 2019 Nueva Lonsdor K518S y Lonsdor K518ISE: Igual: Capacidades de Immo y cobertura ...

  8. git特殊用法

    git stash的使用 1.当前分支写了一半的代码,需要切到其他分支修复bug或者完成优先级较高的任务时 git stash 暂存分支进度 git stash list 查看草稿区 git stas ...

  9. Ubuntu18.04安装thunderbird并设置中文

    Ubuntu18.04安装thunderbird并设置中文 安装thunderbird sudo apt-get install thunderbird 安装中文包 sudo apt-get inst ...

  10. es第四篇:Query DSL

    Query and filter context Match All Query 最简单的search请求,匹配所有文档,文档的_score值都是1,示例: get twitter/_search{  ...