一、定时器Timer的使用

1.1 方法schedule(TimerTask task, Date 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的更多相关文章

  1. Java多线程编程核心技术,第五章

    1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...

  2. java多线程编程核心技术-笔记

    一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...

  3. Java多线程编程核心技术,第六章

    1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...

  4. Java多线程编程核心技术,第四章

    1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...

  5. Java多线程编程核心技术,第三章

    1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...

  6. 《Java 多线程编程核心技术》- 笔记

    作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...

  7. Java多线程编程核心技术(三)多线程通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  8. 《Java多线程编程核心技术》知识梳理

    <Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...

  9. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  10. 《Java多线程编程核心技术》推荐

    写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...

随机推荐

  1. 怎样使用CSS3实现书页(书本)卷角效果

    我们有时候想在页面显示一个公告或用户提示信息. 一个经常使用设计是使用书签形状. 我们能够给书签加入卷角效果.以使其更为逼真.所谓的"卷角"实际上能够用小角度倾斜的阴影效果来模拟. ...

  2. 要练习的lambda

    取list的id 放入新List<Integer> List<Integer> list1 = list.stream().map(albumGroup1 -> albu ...

  3. 在ubuntu上使用Virtual-Box安装Mininet

    使用Virtual-Box安装Mininet看上去简单,但其中也暗藏许多坑.我自己装了多次Mininet,但每次都有缺陷: mininet访问不了网络 用宿主机访问不了mininet虚拟机 最后,终于 ...

  4. asp.net mvc5 配置自定义路径

    首先配置路由文件,默认页是第一个路由的配置: using System; using System.Collections.Generic; using System.Linq; using Syst ...

  5. [转]手工释放linux内存——/proc/sys/vm/drop_caches

    另一篇:http://www.linuxfly.org/post/320/   1.清理前内存使用情况 free -m 2.开始清理  echo 1 > /proc/sys/vm/drop_ca ...

  6. html页面中js判断浏览器是否是IE浏览器及IE浏览器版本

    HTML里: HTML代码中,在编写网页代码时,各种浏览器的兼容性是个必须考虑的问题,有些时候无法找到适合所有浏览器的写法,就只能写根据浏览器种类区别的代码,这时就要用到判断代码了.在HTML代码中, ...

  7. redis源码学习_简单动态字符串

    SDS相比传统C语言的字符串有以下好处: (1)空间预分配和惰性释放,这就可以减少内存重新分配的次数 (2)O(1)的时间复杂度获取字符串的长度 (3)二进制安全 主要总结一下sds.c和sds.h中 ...

  8. 用Doxygen+Graphviz生成函数调用流程图(转)

    源文链接: http://wildpointer.net/2012/04/14/doxygen_graphviz/ 上面这张图是用Doxygen+Graphviz从netcat的源代码生成的函数调用关 ...

  9. 第三篇:python函数

    1.python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你 ...

  10. PHP获得数组的交集与差集

    PHP获得数组的交集与差集 作者:简明现代魔法图书馆 发布时间:-- :: 次阅读 服务器君一共花费了218. ms进行了6次数据库查询,努力地为您提供了提供了这个页面. 数组的交集 array_in ...