Java多线程核心技术(五):定时器Timer
来源:互联网 发布:集体智慧编程中文版 编辑:程序博客网 时间:2024/06/08 15:04
Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。
1、schedule(TimerTask task,Date time)
方法schedule(TimerTask task,Date time)的作用是在指定的日期执行一次某一任务。
如下代码是执行时间晚于当前时间的示例:
public class TestClass{private static Timer timer = new Timer();static public class MyTask extends TimerTask{@Overridepublic void run(){System.out.println("运行了!时间为:"+new Date());}}public static void main(String[] args) throws InterruptedException{try {MyTask task = new MyTask();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = "2017-02-28 15:13:00";Date dateRef;dateRef = sdf.parse(dateString);System.out.println("计划运行时间: " + dateRef.toLocaleString()+"\n当前时间:"+new Date().toLocaleString());timer.schedule(task, dateRef);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}运行结果如下:
当计划执行任务的时间早于当前时间时,则立即执行task任务。
TimerTask是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间较久,则后面的任务运行的时间也会被延迟。
2、schedule(TimerTask task,Date firstTime,long period)
方法schedule(TimerTask task,Date firstTime,long period)的作用是在指定的日期之后,按指定的间隔周期性地无限循环地执行某一任务。
TimerTask类中的cancel()方法的作用是将自身从任务队列中清除。
Timer类中的cancel()方法的作用是将任务队列中的全部任务清空。
3、schedule(TimerTask task,long delay)
方法schedule(TimerTask task,long delay)的作用是以执行schedule(TimerTask task,long delay)方法当前的时间为参考时间,在此时间基础上延迟指定的毫秒数后执行一次TimerTask任务。
4、schedule(TimerTask task,long delay,long period)
方法schedule(TimerTask task,long delay,long period)的作用是以执行此方法的当前时间为参考时间,在此时间基础上延迟指定的毫秒数,再以某一间隔时间无限次数地执行某一任务。
5、scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
使用schedule方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“开始”时的时间来计算。
使用scheduleAtFixedRate方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“结束”时时间来计算。
延时情况时,两者下一次任务执行的时间参考都是上一次任务结束时的时间。
注:如果计划任务的运行时间早于当前时间,则schedule不会执行时间差内的任务,而 scheduleAtFixedRate会执行时间差内的任务,如下代码可测试这一点:
public class TestClass{private static Timer timer = new Timer();static public class MyTask extends TimerTask{@Overridepublic void run(){System.out.println("运行了!时间为:"+new Date());}}public static void main(String[] args) throws InterruptedException{try {MyTask task = new MyTask();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = "2017-02-28 15:50:00";Date dateRef;dateRef = sdf.parse(dateString);System.out.println("计划运行时间: " + dateRef.toLocaleString()+"\n当前时间:"+new Date().toLocaleString());timer.schedule(task, dateRef, 10000);//timer.scheduleAtFixedRate(task, dateRef, 10000);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}运行结果如下:
把schedule换成scheduleAtFixedRate,结果如下:
- Java多线程核心技术(五):定时器Timer
- 《Java多线程编程核心技术》(五)定时器Timer的使用
- java多线程编程核心技术5-Timer定时器
- java多线程核心技术 第五章 定时器Timer
- Java多线程编程核心技术(第五章定时器Timer笔记)
- 【java多线程编程核心技术】5.定时器Timer-笔记总结
- Java多线程编程核心技术--定时器
- 《java多线程编程核心技术》读书笔记5:定时器Timer类的使用
- java多线程之定时器Timer
- Java多线程19:定时器Timer
- 《java多线程编程核心技术》之Timer
- Java核心技术(多线程)五
- Java多线程值之定时器Timer
- java多线程--定时器Timer的使用
- java多线程定时器Timer的使用详解
- 《java 多线程编程核心技术》读书笔记五
- 多线程 定时器 Timer
- Java多线程(五):Timer和TimerTask
- C/C++ 知识回顾 单链表基本操作
- 2. 可视化(The caret package)
- 人机猜拳之Java面向对象小游戏
- xgboost原理
- SQL Server中的Merge关键字
- Java多线程核心技术(五):定时器Timer
- Linux下修改JVM内存大小:
- 来自高维的对抗
- centos 6.8 安装mysql5.6可能会出现的问题
- Fildder
- 生物信息学习——bowtie2使用手册
- (二)CentOS7配置IP
- sqlserver 查看死锁和运行进程
- CSS3曲线阴影与翘角阴影