Timer TimerTask schedule scheduleAtFixedRate
jdk 自带的 timer 框架是有缺陷的, 其功能简单,而且有时候它的api 不好理解。
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class TestTimer { private static final int delay = ; /**
* @param args
*/
public static void main(String[] args) {
Timer t = new Timer();
int seconds = ;
TimerTask task = new SimpleTask();
t.schedule(task , delay, seconds * );
} } class SimpleTask extends TimerTask{ @Override
public void run() { System.out.println("SimpleTask.run() 11 " + new Date()); try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
} //System.out.println("SimpleTask.run() 22 " + new Date());
} }
结果为
SimpleTask.run() 11 Mon May 30 16:43:58 CST 2016
SimpleTask.run() 11 Mon May 30 16:44:02 CST 2016
SimpleTask.run() 11 Mon May 30 16:44:06 CST 2016
显示是每隔4秒, 而不是我想象的 period + sleep time 即 2+4 = 6s, why ??
原来是这样的:
参考: http://stackoverflow.com/questions/15128937/java-util-timer-fixed-delay-not-working
Nope, that's how it is intended to work. The period is the period between start times, not the period between an end time and the next start time.
Basically you're telling it in plain english "start at 1 second and execute every two seconds after that" so 1, 3, 5, 7, etc is the logical interpretation.
shareimprove this answer
answered Feb 28 '13 at 6:34
Affe
31k25064
Ok, I re-read the Javadoc again. That means 'schedule' uses previous task's start-time as reference (2nd task will reference 1st task, 3rd task will reference 2nd task). While 'scheduleAtFixedRate' always use the first task's start-time as reference (all task's start-time are based on the 1st task's start-time). Is that how it works? – Dave Xenos Feb 28 '13 at 6:52
Yeah, the way I think of it is if 'schedule' misses one, it forgets about it, if 'scheduleAtFixedRate' misses one, it puts in a make-up. – Affe Mar 1 '13 at 2:17
Timer TimerTask schedule scheduleAtFixedRate的更多相关文章
- 简单理解java中timer的schedule和scheduleAtFixedRate方法的区别
timer的schedule和scheduleAtFixedRate方法一般情况下是没什么区别的,只在某个情况出现时会有区别--当前任务没有来得及完成下次任务又交到手上. 我们来举个例子: 暑假到了老 ...
- Java中timer的schedule()和schedualAtFixedRate()函数的区别
本文主要讨论java.util.Timer的schedule(timerTask,delay,period)和scheduleAtFixedRate(timerTask,delay,period)的区 ...
- 线程 Timer TimerTask 计时器 定时任务 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Timer&TimerTask原理分析
转载地址,请珍惜作者的劳动成果,转载请注明出处:http://www.open-open.com/lib/view/open1337176725619.html 如果你使用Java语言进行开发,对于定 ...
- JDK Timer & TimerTask
目录 Timer & TimerTask Binary Heap Insert DELETE MIN PERFORMANCE LifeCycle Constructor MainLoop sc ...
- Timer的schedule和scheduleAtFixedRate方法的区别解析(转)
在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...
- Timer的schedule和scheduleAtFixedRate方法的区别解析
在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...
- Java Timer, TimerTask, Timer.Schedule
schedule的意思(时间表.进度表) timer.schedule(new TimerTask(){ void run()},0, 60*60*1000);timer.schedule(new M ...
- java timer timertask mark
其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: 1 2 3 4 5 6 Timer timer = ...
随机推荐
- Java第05次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- R语言数据挖掘相关包总结-转帖
与数据挖掘有关或者有帮助的R包和函数的集合. 1.聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pam, pamk, clara 基于层次的 ...
- django之创建项目,添加app
一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python man ...
- Android WebView 开发详解
Android WebView 开发详解 参见 http://blog.csdn.net/typename/article/details/39030091
- 查看php-fpm开启的进程数以及每个进程的内存限制
查看php-fpm开启的进程数以及每个进程的内存限制 1.通过命令查看服务器上一共开了多少的 php-cgi 进程 ps -fe |grep "php-fpm"|grep &qu ...
- Python——pandas读取JSON数据,xml,html数据(python programming)
- js中事件三阶段
js中事件三阶段 先贴代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- [转][xml]SQL转义
SQL语句包含">"和"<"时,在PL/SQL中可以正常运行,但是放在XML中,编译报错,这是因为在XML文档中的所有文本都会被解析器解析,文本内容 ...
- laraval一键安装包的下载地址
http://laravelacademy.org/resources-download
- [UE4]链接多个字符串Make Literal String