文档章节

Timer设计原理

亭子happy
 亭子happy
发布于 2014/04/17 21:35
字数 356
阅读 354
收藏 0

    Timer类中定义了一个静态类TimerImpl,该TimerImpl是一个线程类,继承自Thread。Timer类中有一个TimerImpl属性,在Timer的构造函数中new了一个TimerImpl对象,并付给Timer的全局属性TimerImpl。在new TimerImpl时,执行了该TimerImpl线程的start方法。

    在Timer对象执行schedule方法时,会调用到scheduleImpl方法,在该方法中,该Timer的TimerImpl对象会调用到方法insertTask,将用户自定义的TimerTask插入到TimerTask对象的一个队列中。同时,执行该TimerImpl的notify方法,唤醒该线程wait()的地方。

    Timer与TimerImpl的静态UML图如下:

代码执行基本流程如下:

实例化Timer

1、new Timer

2、new TimerImpl

3、TimerImpl start

4、TimerImpl run

5、TimerImpl wait

执行Timer的schedule方法

6、Timer schedule

7、Timer scheduleImpl

8、TimerImpl insertTask

9、TimerImpl notify


容易出现问题的地方:

在Timer对象调用schedule方法之前绝对不能调用它的cancel方法。如果调用了就会出现错误: java.lang.IllegalStateException: Timer was canceled。所以程序中需要在第一个线程执行Timer对象的schedule方法,在第二个线程中执行Timer对象的cancel方法这种情况,就需要设置一个cancelled标志位,在cancelled前设置false,cancel后设为true,并在执行第一个线程的schedule方法前,判断cancelled标志位是否不为true,如果为true则不执行schedule方法。


© 著作权归作者所有

共有 人打赏支持
亭子happy
粉丝 117
博文 201
码字总数 45713
作品 0
海淀
程序员
基于事件驱动状态机的协程框架设计

在设计协程之前,先将几个小概念 并发: 最早的计算机,每次只能执行一个程序,只有当当前执行的程序结束后才能执行其它程序,在此期间,别的程序都得等着。到后来,计算机运行速度提高了,程...

Sean-x
2016/07/11
271
0
Java并发编程之Timer源码分析

timer在JDK里面,是很早的一个API了。具有延时的,并具有周期性的任务,在newScheduledThreadPool出来之前我们一般会用Timer和TimerTask来做,但是Timer存在一些缺陷,为什么这么说呢?   ...

狂小白
07/12
0
0
JDK Timer 实现原理分析

说明 本文分析的是 JDK 7 Timer 基本用法 输出: 主要能够指定定时任务的初始延迟、间隔执行时间。 实现原理 首先画了一张示意图,能够说明 Timer 的基本原理。 大体上有 4 个类: Timer:定...

被称为L的男人
07/02
0
0
Timer时间控制器的源码解析

在介绍之前,还是经典的几个问题: 1、Timer是什么?能干什么? 2、Timer的使用案例? 3、Timer的原理? 4、Timer教其他同类工具的优缺点? 1、Timer是jdk中提供的一个定时器工具,使用的时候...

梦的践行者
2017/12/16
0
0
走在网页游戏开发的路上(六)

本文转自吴秦博客园博客,原文链接:http://www.cnblogs.com/skynet/archive/2011/06/11/2078554.html,如需转载请自行联系原作者Flash动画原理 ——动画是将静止的画面变为动态的艺术.实现...

老朱教授
2017/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DES/3DES(TripleDES)加密、解密测试数据

以下结果经 PHP+openssl及VB.NET验证,ECB模式。 PHP 7.0.10 (cli) (built: Aug 18 2016 09:48:53) ( ZTS ) OpenSSL Library Version: OpenSSL 1.0.1t 3 May 2016 VB.net 2003 ****** DES(S......

SamXIAO
20分钟前
0
0
Java11的新特性

Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 序 本文主要讲述一下Java11的新特性 版本号 java...

go4it
21分钟前
1
0
Maven常用命令及相关笔记

Maven常用命令 dos指令 4. 编译源代码: mvn compile 6. 运行测试: mvn test 8. 打包: mvn package 9. 在本地Repository中安装jar: mvn install 10. 清除产生的项目: mvn clean 4. 运行项...

颖伙虫
27分钟前
0
0
swagger2.2.2 与 spring cloud feign冲突 导致服务请求报空

swagger2.2.2 与 spring cloud feign冲突 Java代码 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.choosefine.web.console.ar......

泉天下
30分钟前
0
0
设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。 如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们...

backbye
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部