Java中timer的schedule()和schedualAtFixedRate()函数的区别
本文主要讨论java.util.Timer的schedule(timerTask,delay,period)和scheduleAtFixedRate(timerTask,delay,period)的区别。
这两个函数不管是哪一个,TImer都是单线程的,任务始终在这个单线程里面执行。
下面讨论四种情况:
[(任务3s,间隔2s)+(任务2s,间隔3s)]×[schedule+scheduleAtFixedRate]
schedule,任务3s,间隔2s
new Timer().schedule(new TimerTask() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " " + scheduledExecutionTime() / 1000 + " " + System.currentTimeMillis() / 1000);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}}, 0, 2000);输出为
Timer-0 1519651551 1519651551
Timer-0 1519651554 1519651554
Timer-0 1519651557 1519651557
schedule,任务2s,间隔3s
把上面代码中的Thread.sleep()改为2s,把interval改为3s
Timer-0 1519651602 1519651602
Timer-0 1519651605 1519651605
Timer-0 1519651608 1519651608
scheduleAtFixedRate,任务3s,间隔2s
new Timer().scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " " + scheduledExecutionTime() / 1000 + " " + System.currentTimeMillis() / 1000);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}}, 0, 2000);输出为
Timer-0 1519651707 1519651707
Timer-0 1519651709 1519651710
Timer-0 1519651711 1519651713
Timer-0 1519651713 1519651716
scheduleAtFixedRate,任务2s,间隔3s
Timer-0 1519651750 1519651750
Timer-0 1519651753 1519651753
Timer-0 1519651756 1519651756
总结
下面定义四个名称:
- timer.scheduledExecutionTime()为理论时间间隔
- System.currentMilliSeconds()为实际时间间隔
- schedule(task,delay,interval)和scheduleAtFixedRate(task,delay,interval)中的interval参数为设定时间间隔
- 任务时间:执行任务所花费的时间
schedule()运行时,理论时间间隔总是等于实际时间间隔,此时间间隔为max(任务时间,设定时间间隔)
scheduleAtFixedRate()运行时,理论时间间隔总是等于设定的时间间隔,实际时间间隔总是等于max(任务时间,间隔时间)。
转载于:https://www.cnblogs.com/weiyinfu/p/8476180.html
Java中timer的schedule()和schedualAtFixedRate()函数的区别相关推荐
- Java 中Timer和TimerTask 定时器和定时任务使用的例子
转载自 Java 中Timer和TimerTask 定时器和定时任务使用的例子 这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任务的类,它接受一个TimerTa ...
- java step1:基础知识5(java中Timer和TimerTask的使用)
1.定时任务:java中Timer和TimerTask的使用 转载自http://batitan.iteye.com/blog/253483 转载于:https://www.cnblogs.com/s ...
- java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
今天在superWaba上看到Convert.toDouble(String str),由于底层问题比较大的数就出错,现在自己写了一个 程序中info()是我加的打印,可以去掉 java中 Conve ...
- Java中static代码块,main函数,构造函数运行顺序
1.Java中static代码块,main函数,构造函数运行顺序如下: 答:static代码块是主动执行的,因此static代码块先执行,然后是执行构造函数,最后是Main函数. 如下例子: publ ...
- java中list,set,map集合的区别,及面试要点
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...
Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...
- Java中Array和ArrayList之间的9个区别
array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...
- java中的NIO和IO到底是什么区别?20个问题告诉你答案
摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...
最新文章
- 生命的脆弱——悼念朋友
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- C++ Primer 5th笔记(chap 13 拷贝控制) 对象移动
- 常见浏览器兼容性问题与解决方式
- 阻止 WSL 自动生成/etc/hosts 文件
- CCF201912-2 回收站选址(100分)【序列处理】
- 从苏宁电器到卡巴斯基第13篇:我在苏宁电器当营业员 V
- asp毕业设计——基于asp+access的公司门户网站设计与实现(毕业论文+程序源码)——公司门户网站
- MATLAB图像复原系统
- Winhex的使用(慢慢更
- 英国留学生论文introduction部分怎么写比较好?
- 原生JS实现FlappyBird游戏 超详细解析 快来做一个自己玩吧
- mysql查询时候返回一个序号
- R语言学习笔记(2)——mutate()函数
- 模糊数学Fuzzy Set第2讲——Fuzzy Logic Fuzzy Reasoning
- codeforces 1635E-Cars (二分图染色+拓扑排序)
- Wi-Fi 工作频段
- MODBUS通讯协议和RS232以及RS485通讯协议有什么区别
- 扭矩扭力测量——扭矩传感器
- item_get - 获得淘宝商品详情接口调用