文档章节

Timer 定时器相关类

奋斗到天明
 奋斗到天明
发布于 2016/04/11 11:04
字数 739
阅读 48
收藏 4

Timer相关类

定时执行相关类,包括java.util.Timer,以及TimerTask、还有内部类TaskQueue、TimerThread等

###java.util.TimerTask

Timer执行的调度单元。

#####常用的属性

  1. nextExecutionTime
    Task下一次执行时间

  2. period
    执行间隔时间。有负值、正值、0三种。0表示这个Task只执行一次、负值表示,计算下次执行时间时,用当前任务执行的当前时间+间隔时候计算。正值表示,第一次时,用起始时间+间隔时间得到下次执行时间,然后严格用执行时间+间隔时间,所以为负值的时候为“补偿”当前时间到初始时间之前所有的过时任务。

3、state以及常量VIRGINSCHEDULEDEXECUTEDCANCELLED
Task的状态。

###java.util.Timer

Timer调度执行类

TaskQueue 任务队列内部类
  1. 内部维护一个TimerTask数组,起始大小为128,然后以2倍扩大。
  2. 数组是一个二叉树结构的最小堆,每上层大小都比下层要小。并向外提供了一系列操作数据方法,同时存取任务方法中都有维护最小堆。插入队尾和弹出队首方法后,分别用fixUpfixdown重排序。还有一个heapify重排序方法。
TimerThread 调度器线程内部类
  1. newTasksMayBeScheduled
    boolean字段,受queue监视器保护,表明Timer是否还有活的引用。

  2. queue
    所有执行任务,为TaskQueue实例。

  3. mainLoop
    循环执行所有任务。其中有关于period三种情况的不同处理方法。

常用属性
  1. queue
    任务队列,是一个最小堆队列。

  2. thread
    执行任务线程,TimerThread实例类。

  3. nextSerialNumber
    定时器序列号生成器

常用方法
  1. schedulescheduleAtFixedRate重载方法
    两者调用sched私有方法,根据传入的参数的不同,决定period的值。由period的值决定Task的规则类型。

Timer内部逻辑

计时器主要用的类有两个,一个是调度执行器Timer,一个是任务类TimerTask。

TimerTask继承了Runnable接口,是一个多线程类,根据period值分为:

  1. 0,一次执行;
  2. 负值,按当前执行时间+间隔时间执生成下次执行时间。
  3. 正值,按上次执行时间+间隔时间生成下次执行时间。该方式会补偿执行从初始时间到当前时间内,有多少个间隔次数没有执行。

Timer类中,有两个内部类,一个是任务队列类。内部维护一个最小堆。一个是调度线程类TimerThread,无限循环执行任务队列中的任务。

Timer主类中,持有一个任务队列与调试线程类。主要有一系列重载的调试方法,除了之前的执行间隔机制的不同,还有初始时间的不同,根据传入的类型,可以是一个指定时间点(Date),也可以是当前时间往后延迟指定时间段(Long)。

© 著作权归作者所有

上一篇: 六种单例模式
下一篇: Thread 相关类
奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
Java定时器Timer学习之一

种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PLC中,成为SD型定时器 断开延时型定时器:这种定时器是当输入条件00000为ON时...

王怀楼
2018/10/17
52
0
C#多线程学习(五) 多线程的自动管理(定时器)

本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线...

Yamazaki
2012/03/29
23
0
Android中定时器Timer的使用

前言 Android开发过程中,偶尔会使用到定时器。实现定时器的方式有很多种,今天就介绍一个针对Timer进行封装的TimerManager类的使用。 今天涉及内容: TimerManager原理概述 TimerManager的方...

奔跑的佩恩
10/23
0
0
【Java基础】定时器Timer

简介 JDK提供的定时器,可以执行一些简单不复杂的任务,如果需要功能强大的定时器Quartz框架。 定时器任务的执行需要两个基本的类: java.util.Timer java.util.TimerTask 要运行一个定时任务...

Auhgnahz
2015/12/22
254
0
rt-thread内核对象标志(object.flag)总结

1 前言 在前面介绍rt-thread内核对象时(http://blog.csdn.net/flydream0?viewmode=contents),有介绍到rt-thread内核对象成员flag,但是没有怎么具体介绍他的含意,只是把它当做普通标志来理解,...

长平狐
2013/03/19
301
0

没有更多内容

加载失败,请刷新页面

加载更多

006-Docker中导出单个或多个tar包

docker中导出单个镜像和多个镜像的tar包 docker save [images] > [name.tar] docker save [images] [images] > [name.tar]...

伟大源于勇敢的开始
今天
6
0
Kotlin基础语法学习

安装好安卓studio,以及插件支持Kotlin 就可以在创建项目的时候选择 Kotlin语言了。 https://www.jianshu.com/p/4ab13691d681 参考手册: https://www.runoob.com/kotlin/otlin-android-setu...

T型人才追梦者
今天
4
0
java实现简单计算器

1.概述 之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里 这次用java的swing写的(这差距好像有点大,好吧是qt太强了). 先上图: 2.UI 总体布局使用流布局. (1)文本框 文本框就...

Blueeeeeee
今天
4
0
纯CSS实现DIV悬浮(固定位置)

纯CSS实现的DIV悬浮效果(固定位置),兼容常用的浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗等。效果如下: 实现代码: <!DOCTYPE html> <html> <head> <meta ...

独钓渔
今天
6
0
OSChina 周二乱弹 —— 给我来个女菩萨

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐#分享XXXTENTACION/Travis Barker的单曲《Pain = BESTFRIEND》: 《Pain = BESTFRIEND》- XXXTENTACION/...

小小编辑
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部