文档章节

Timer设计原理

亭子happy
 亭子happy
发布于 2014/04/17 21:35
字数 356
阅读 352
收藏 0
点赞 0
评论 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
粉丝 113
博文 195
码字总数 45462
作品 0
海淀
程序员
c#设计的第一款软件欢迎界面

如何实现软件欢迎界面效果呢?打开vc 2010启动界面,使用c#实现其效果。原理:首先在主窗体弹出来之前先运行欢迎界面,等运行完将欢迎界面关闭然后再打开主窗体。然后,新建一个项目,再在原...

crossmix ⋅ 2015/04/07 ⋅ 0

基于事件驱动状态机的协程框架设计

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

Sean-x ⋅ 2016/07/11 ⋅ 0

Timer时间控制器的源码解析

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

梦的践行者 ⋅ 2017/12/16 ⋅ 0

走在网页游戏开发的路上(六)

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

老朱教授 ⋅ 2017/11/26 ⋅ 0

极光推送技术原理:移动无线网络长连接

移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证...

JORDANSG ⋅ 2013/07/24 ⋅ 1

Android使用Timer编写倒计时程序

开篇大家可以先看看Timer的基础用法,以及简单的原理。http://my.oschina.net/zhengweishan/blog/493891 Java之Timer使用。这里我要说的是Android使用Timer编写一个倒计时程序。 需求:实现简...

火龙战士 ⋅ 2015/08/28 ⋅ 0

类似VM菜单的简单实现

1.首先在form中添加一个Panel, 2.Load事件中添加如下代码: panel1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0); panel1.Location = new Point(panel1.Location.X, 10-panel1.H......

Vevi ⋅ 2012/08/11 ⋅ 0

RAW-OS:时间管理

平台:VS2010 版本:1.04 在学习RAW-OS的时间管理之前,请先了解WaitForMultipleObjects和semaphore原理。 先讲解"时间节拍"(系统心跳)这个概念,RTOS需要它来提供task延迟和等待超时等时间管...

pregnant ⋅ 2014/03/10 ⋅ 0

推送技术原理:移动无线网络长连接

移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证...

青莲居士 ⋅ 2016/01/28 ⋅ 3

nginx源码分析之事件机制

事件机制尤如nginx的心脏一般,不停的运转,保证了nginx的请求响应模式得以正常工作。 本文将剖析事件机制的原理和实现。 nginx本身支持多种机制,如 poll, epoll, select, aio, kqueue等,这...

那一剑的风情 ⋅ 2012/10/17 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部