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() {
@Override
public 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() {
@Override
public 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(任务时间,间隔时间)。
Java中timer的schedule()和schedualAtFixedRate()函数的区别的更多相关文章
- 简单理解java中timer的schedule和scheduleAtFixedRate方法的区别
timer的schedule和scheduleAtFixedRate方法一般情况下是没什么区别的,只在某个情况出现时会有区别--当前任务没有来得及完成下次任务又交到手上. 我们来举个例子: 暑假到了老 ...
- java中URL 的编码和解码函数
java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...
- java中4种修饰符访问权限的区别及详解全过程
java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- Java中的“==操作符”和equals方法有什么区别
Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...
- java中,return和return null有什么区别吗?
java中,return和return null有什么区别吗? 最大的区别:return;方法的返回值必须是void!return null;方法的返回值必须不是 原始数据类型(封装类除过)和void ...
- Java中关键字continue、break和return的区别
Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break: 跳出循环体,继续执行循环外的函数体 return: 跳出整个函数 ...
- Java中Compareable和Comparator两种比较器的区别
Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...
- java中的NIO和IO到底是什么区别?20个问题告诉你答案
摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...
随机推荐
- 【算法】Java-Redis-Hash算法对比-参考资料
Java-Redis-Hash算法对比-参考资料 redis java map 红黑树_百度搜索 java使用redis缓存(String,bean,list,map) - CSDN博客 redis ...
- kaggle预测
两个预测kaggle比赛 一 .https://www.kaggle.com/c/web-traffic-time-series-forecasting/overview Arthur Suilin• ...
- JPA(七):映射关联关系------映射双向多对一的关联关系
映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone; import java.util.Date; import java. ...
- vSCode打开文件老覆盖原窗口
https://segmentfault.com/q/1010000006131199?_ea=1023522 设置中搜preview,改为false
- PostgreSQL入门教程
一.安装 首先,安装PostgreSQL客户端. sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器. sudo apt-get ins ...
- iOS中文API之UITouch详解
UITouch 对象用于位置. 大小. 运动和一根手指在屏幕上为某一特定事件的力度.触摸的力度是从开始在 iOS 9 支持 3D 的触摸的设备上可用.你可以通过UIEvent对象传递给响应者对象访问. ...
- [Canvas]人物型英雄出现(前作仅为箭头)
源码点此下载,用浏览器打开index.html观看. 代码: <!DOCTYPE html> <html lang="utf-8"> <meta ht ...
- GitHub没有实时通知怎么办?当然是自己上手写一个啊!
相信各位程序员对github已经不陌生了.不知道各位有没有注意到GitHub没有推送通知这个功能.当有人在我的存储库中创建了一个提取请求/问题时,我可以收到电子邮件通知,但当有人stars/forks ...
- SuperMap开发入门4——保存的坑
工作空间.地图等的打开.保存.删除是最基本的操作,可我居然卡在保存工作空间的问题上了. 功能需求 需求很简单:打开工作空间中的某一地图,缩放一下,保存地图.(下次打开时,已经缩放到上次修改过的地方) ...
- IIS 7 及以上 IIS错误页“编辑功能设置...”提示“锁定冲突”
原因是全局的设置锁定了此项,不让修改. 解决方法如下: