在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了。定时器的实现方式有很多种,今天总结最简单的实现方式。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() {@Overridepublic 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()方法仅仅会取消正在调度的定时任务。

转载于:https://www.cnblogs.com/Sweethoney/p/10486483.html

定时器实现方式之TimerTask、Timer相关推荐

  1. java timertask 初始化_定时器实现方式之TimerTask、Timer

    在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了.定时器的实现方式有很多种,今天总结最简单的实现方式.java 1.3引入了定时器框架,用于在定时器上下文中控制线程的 ...

  2. MFC 定时器使用方式

    MFC 定时器使用方式 2011-04-30 12:24:58|  分类: 默认分类 |  标签: |字号大中小 订阅 用SetTimer函数 创建定时器 参数1表示定时器的ID,参数2表示时间间隔, ...

  3. 51单片机实验 LED半秒闪烁 定时器0方式2 中断实现

    51单片机实验 LED半秒闪烁 定时器0方式2 中断实现 实验目的: P1.0接一个发光管,实现亮半秒灭半秒, 要求使用定时器0工作方式2,中断实现. C语言代码: #include "at ...

  4. android 开启一个定时线程_Android 定时器实现方式

    在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法 二.采用Handler的postDelayed(Runnable, long)方法 三 ...

  5. 定时器工作方式0初值除32_51单片机C语言程序100例分析(2)定时器+中断

    #include<reg51.h> //包含 51 单片机寄存器定义的头文件 void main(void) {TMOD=0x01;// 使用定时器 T0 的模式 1TH0=(65536- ...

  6. java定时器克隆方式,Java-DropWizard指标计量器与计时器

    您之所以会感到困惑,部分原因是DW Metrics Timer IS是DW Metrics Meter. 仪表专用于速率,单位为Hz(事件每秒). 每个仪表都会发布4(?)个不同的指标: 自指标开始以 ...

  7. STM32 - 定时器的设定 - 基础 01 - Timer Base - Prescaler description - Upcounting mode

    前言:时基是定时器的最基本的功能: 本节详细叙述STM32的时基的功能. 1 Time-base unit The main block of the programmable advanced-co ...

  8. python定时器的使用方法_Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  9. 使用PY003基于外部中断+定时器的方式实现NEC红外解码

    写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的,找了很多帖子有看到用外部中断下降沿判断(但可惜判定数据的方式是while在外部中断里面死等的),有看到用100us定时器定时刷来判断,感 ...

最新文章

  1. 挪动以太坊:比特币现金的新功能使其成为智能合约竞争者
  2. 第六章 逻辑回归-机器学习老师板书-斯坦福吴恩达教授
  3. RabbitMQ之比较好的资料
  4. 当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记
  5. 双向dcdc变换器simulink仿真_二极管箝位五电平变换器Simulin仿真
  6. 添加javascript代码:_JavaScript(1)
  7. AutoFac+MVC+WebApi源码----我踩过的坑
  8. 糖尿病监测中国际通用的“金标准”
  9. Leecode刷题热题HOT100(9)——回文数
  10. 爬虫爬评书吧_200行代码实现一个有声听书网爬虫下载器
  11. [译] JavaScript 的函数式编程是一种反模式
  12. windows和Linux虚拟机或者云主机之间传输文件
  13. 2021-11-16-小甲鱼python教学视频总结
  14. 通过.pk8及.pem文件生成Android studio使用的keystore文件。
  15. 浅谈聚类分析MATLAB实现
  16. 射频电路设计——传输线理论(Transmission Line Analysis) 【上】
  17. 数据结构(C#)_排序算法(冒泡排序)
  18. win8计算机禁止休眠,win8系统设置禁止电脑休眠的教程方法
  19. vue运行报错冒号问题,browser.js:158 Uncaught SyntaxError: Unexpected token ‘:‘
  20. (转)loff_t *ppos是什么东东

热门文章

  1. linux mysql 忘记root密码_Linux MySQL忘记root密码解决方案
  2. LeetCode 02.两数相加
  3. php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能
  4. scrapyd部署_第八章 第一节 scrapyd和scrapy-client
  5. vue 传参 微信_vue-router 你可能忽略的知识点
  6. python lock_python多线程Lock和RLock的区别
  7. 删除一个程序Linux,一天一个Linux基础命令删除文件或目录命令rm
  8. hadoop源码分析_Spark2.x精通:Job触发流程源码深度剖析(一)
  9. win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例
  10. U盘在Ubuntu20.04下只能读取文件不能向U盘复制文件