《JAVA多线程编程核心技术》 笔记:第五章:定时器Timer
一、定时器Timer的使用
1.1 方法schedule(TimerTask task, Date time)
是否过期
执行说明
开始执行时间
time>当前时间(未过期)
在time到达时执行
time(未被延期)
time<当前时间(已过期)
当前时间立即执行
当前时间(被延期)
| 是否过期 | 执行说明 | 开始执行时间 |
|---|---|---|
| time>当前时间(未过期) | 在time到达时执行 | time(未被延期) |
| time<当前时间(已过期) | 当前时间立即执行 | 当前时间(被延期) |
注意:TimeTask以队列的方式一个一个被顺序执行。
如果前一个任务执行时间过长,则后面的任务开始执行时间会被延期。和计划时间不同。(这可能也是当time<当前时间时,任务会被立即执行的原因)
1.2 方法schedule(TimerTask task, Date firstTime, long period)
开始执行时间:同上
| 是否过期 | 执行说明 | 开始执行时间 |
|---|---|---|
| firstTimetime>当前时间(未过期) | 在time到达时执行 | time(未被延期) |
| firstTimetime<当前时间(已过期) | 当前时间立即执行 | 当前时间(被延期) |
下一次执行时间:同上
| 是否过期 | 执行说明 | 开始执行时间 | 实际执行间隔 |
|---|---|---|---|
| 任务执行时间<时间间隔 (即:下一次计划执行时间>当前时间) 【不延时】 |
下一次计划执行时间到达时执行 | 下一次计划执行时间 | 计划的间隔时间 |
| 任务执行时间>时间间隔 (即:下一次计划执行时间<当前时间) 【延时】 |
上一次执行完之后立即执行 | 当前时间 | 任务的执行时间 |
1.3 方法schedule(TimerTask task, long delay)的测试
方法作用:以执行 方法schedule(TimerTask task, long delay)的当前时间为参考时间,在此基础上延迟指定的毫秒数后执行一次TimerTask任务。
开始执行时间:当前时间+延迟时间
只执行一次,所以,无下一次任务执行情况
1.4 方法schedule(TimerTask task, long delay, long period)的测试
方法作用:以执行 方法schedule(TimerTask task, long delay, long period)的当前时间为参考时间,在此基础上延迟指定的毫秒数,再以某一间隔时间无限次地后执行某一任务。(只有第一次执行需要延迟delay,以后执行都是以period为周期间隔)
由于任务执行时间有延迟,所以对于下一次任务执行的开始时间。就不是很确定了。
下一次执行时间:同schedule(TimerTask task, Date firstTime, long period)的下一次执行时间
1.5 cancel()方法
| 方法 | TimerTask类 | Timer类 |
|---|---|---|
| cancel()方法 | 将自身从任务队列中清除 | 将任务队列中的全部任务清空; |
| 注意:如果Timer类的cancel()方法没有争抢到queue锁,那么TimerTask类中的代码逻辑会继续执行。 |
1.6 方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的测试
1.6.1 基本信息和对比
方法schedule和方法scheduleAtFixedRate:都会按照顺序执行,所以不会线程不安全;
延时的情况:都是立即执行,没有什么区别。
不延时的情况。
| 方法 | 下一次任务的执行时间 |
|---|---|
| schedule | 参考上一次任务“开始”时的时 |
| scheduleAtFixedRate | 参考的是上一次任务“结束”时的时间 |
对比说明:
| 属性 | schedule | scheduleAtFixedRate |
|---|---|---|
| 下一次任务的执行时间【延时】 | 立即执行 | 立即执行 |
| 下一次任务的执行时间【不延时】 | schedule【Date】参考上一次任务“开始”时的时间 schedule【Long】参考上一次任务“结束”时的时间 因为Long表示延迟时间,Date表示开始时间 |
schedule【Date】参考上一次任务“开始”时的时间 schedule【Long】参考上一次任务“结束”时的时间 因为Long表示延迟时间,Date表示开始时间 |
| 追赶执行性(主要区别) | 无 | 有 |
1.6.2 追赶执行性:
这么说吧,任务计算在13:00执行,每2s执行一次,现在时间是13:20。
如果不具有追赶执行性:就是在13:00-13:20这段时间内,任务没执行就算了。从当前时间开始,任务继续执行。
如果具有追赶执行性:就是在13:00-13:20这段时间内,没执行的任务需要被补充执行。从当前时间开始,先补充执行对应时间段内应该被执行的次数,然后任务开始继续正常执行。
END!
《JAVA多线程编程核心技术》 笔记:第五章:定时器Timer的更多相关文章
- Java多线程编程核心技术,第五章
1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...
- java多线程编程核心技术-笔记
一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...
- Java多线程编程核心技术,第六章
1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...
- Java多线程编程核心技术,第四章
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
- Java多线程编程核心技术,第三章
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- 《Java多线程编程核心技术》知识梳理
<Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- 《Java多线程编程核心技术》推荐
写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...
随机推荐
- C# -- 使用递归列出文件夹目录及目录下的文件 神技do{}while(false)
C# -- 使用递归列出文件夹目录及目录下的文件 使用递归列出文件夹目录及目录的下文件 1.使用递归列出文件夹目录及目录下文件,并将文件目录结构在TreeView控件中显示出来. 新建一个WinFor ...
- jquery cookie操作方法
1. 设置cookie的值,把name变量的值设为value $.cookie(’name’, ‘value’); 2.新建一个cookie 包括有效期 路径 域名等 $.cookie(’n ...
- unity, UGUI Text outline
UGUI Text的勾边效果是通过添加component实现的: Add Component->UI->Effects->Outline 参考:http://www.cnblogs. ...
- log4j DatePattern 解惑
og4j.appender.Root=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Root.File=../logs/bloglog ...
- JS的类型转换,强制转换和隐式转换
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
- javascript的弹框
学习js最先了解到的两种种简单测试手段就是alert("blah");和console.log("blah");了. 除了alert之外,js还有两种弹框 co ...
- Struts提交form之后抛出异常java.lang.IllegalArgumentException: The path of an ForwardConfig cannot be null
原因:在ActionForm中使用了ActionErrors,并且ActionErrors中的内容不为空,所以Struts会根据action的配置跳转到input指定的页面.但是我在配置action的 ...
- 问题-Delphi7中JSON遍历节点不支持使用IN处理方法?
相关资料:http://www.cnblogs.com/del/archive/2009/10/23/1588690.html 问题现象:在高版本中可以使用IN处理JSON的节点循环问题,可是发现D7 ...
- JavaScript中的对象冒充
JavaScript里没有继承关键字,想要继承一个类需要用到“对象冒充”. <!DOCTYPE html> <html xmlns="http://www.w3.org/1 ...
- 有效提升大数据量写入excel的效率
在开发过程中经常会有需要将数据导出到 excel 的需求,当数据量很大,达到几万甚至几十万.几百万级别的时候,如何加快生成 excel 的速度呢?首先普及一下知识背景:Excel2003 及以下版本一 ...
1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...
一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...
1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
<Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...
C# -- 使用递归列出文件夹目录及目录下的文件 使用递归列出文件夹目录及目录的下文件 1.使用递归列出文件夹目录及目录下文件,并将文件目录结构在TreeView控件中显示出来. 新建一个WinFor ...
1. 设置cookie的值,把name变量的值设为value $.cookie(’name’, ‘value’); 2.新建一个cookie 包括有效期 路径 域名等 $.cookie(’n ...
UGUI Text的勾边效果是通过添加component实现的: Add Component->UI->Effects->Outline 参考:http://www.cnblogs. ...
og4j.appender.Root=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Root.File=../logs/bloglog ...
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
学习js最先了解到的两种种简单测试手段就是alert("blah");和console.log("blah");了. 除了alert之外,js还有两种弹框 co ...
原因:在ActionForm中使用了ActionErrors,并且ActionErrors中的内容不为空,所以Struts会根据action的配置跳转到input指定的页面.但是我在配置action的 ...
相关资料:http://www.cnblogs.com/del/archive/2009/10/23/1588690.html 问题现象:在高版本中可以使用IN处理JSON的节点循环问题,可是发现D7 ...
JavaScript里没有继承关键字,想要继承一个类需要用到“对象冒充”. <!DOCTYPE html> <html xmlns="http://www.w3.org/1 ...
在开发过程中经常会有需要将数据导出到 excel 的需求,当数据量很大,达到几万甚至几十万.几百万级别的时候,如何加快生成 excel 的速度呢?首先普及一下知识背景:Excel2003 及以下版本一 ...