Java定时任务调度工具详解之Timer
来源:互联网 发布:遗传算法c语言程序 编辑:程序博客网 时间:2024/06/06 04:09
一、基本概念
1、什么是定时任务调度
基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务
2、在Java中的定时调度工具
(1)两种工具
Timer
Quartz
(2)两者的区别:
1>出身不同:Timer由jdk直接提供,调用方式简单粗暴,不需要别的jar包支持
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,并非jdk提供,需要引入别的jar包
2>能力区别:某个时间执行什么任务的话,Timer就可以搞定,而如果要每个星期的9点提示约会的话就需要Quartz,由此得出,Quartz的时间控制功能远比Timer强大
3>底层机制:Timer只有一个后台线程去执行定时任务,而拥有后台执行线程池的Quartz能够使用多个线程去执行定时任务
Timer小弟能进行实现的尽量用Timer,因为Quartz大哥出场费更高
二、Timer纸上谈兵及第一个例子
1、Timer定义
有且只有一个后台线程对多个业务线程进行定时定频率的调度
2、主要的构件
3、Timer工具类详解
4、第一个实例
MyTimerTask.java
public class MyTimerTask extends TimerTask{private String name;public MyTimerTask(String name) {super();this.name = name;}@Overridepublic void run() {//打印当前name的内容System.out.println("Current exec name:"+name);}public String getName() {return name;}public void setName(String name) {this.name = name;}}
MyTimer.java
public class MyTimer {public static void main(String[] args) {//1.创建一个Timer实例Timer timer = new Timer();//2.创建一个MyTimerTask实例MyTimerTask myTimerTask = new MyTimerTask("徐志摩");//3.通过timer定时定频率调用MyTimerTask的业务逻辑//第一次执行是在当前的2秒之后,之后每隔一秒执行一次timer.schedule(myTimerTask,2000L,1000L);}}
三、Timer函数及综合应用
1、schedule的四种用法
(1)schedule(task,time)
参数:task-所要安排的任务 time-执行任务的时间
作用:在时间等于或超过time的时候执行且仅执行一次task
(2)schedule(task,time,period)
参数:task-所要安排的任务 time-执行任务的时间 period-执行一次task的时间间隔,单位是毫秒
作用:时间等于或超过time时首次执行task,之后每隔peroid毫秒执行一次task
(3)schedule(task,delay)
参数:task-所要安排的任务 delay-执行任务前的延迟时间,单位是毫秒
作用:等待delay毫秒后执行且仅执行一次task
(4)schedule(task,delay,period)
参数:task-所要安排的任务 delay-执行任务前的延迟时间,单位是毫秒 period-执行一次task的时间间隔,单位是毫秒
作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次
2、scheduleAtFixedRate的两种用法
(1)scheduleAtFixedRate(task,time,period)
参数:task-所要安排的任务 time-执行任务的时间 period-执行一次task的时间间隔,单位是毫秒
作用:时间等于或超过time时首次执行task,之后每隔peroid毫秒执行一次task
(2)scheduleAtFixedRate(task , delay,period)
参数:task-所要安排的任务 delay-执行任务前的延迟时间,单位是毫秒 period-执行一次task的时间间隔,单位是毫秒
作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次
3、其他重要函数
(1)TimerTask的cancel(),scheduledExecutionTime()
1>cancel()
作用:取消当前TimeTask里的任务
2>scheduledExecutionTime()
作用:返回此任务最近执行的已安排执行的时间
返回值:最近发生执行安排的时间,为long型
(2)Timer的cancel(),purge()
1>cancel()
作用:终止此定时器,丢弃所有当前已安排的任务
2>purge()
作用:从此计时器的任务队列中移除所有已取消的任务
返回值:从队列中移除的任务数
4、schedule和scheduleAtFixedRate的区别
两种情况看区别:
(1)首次计划执行的时间早于当前的时间
schedule()方法
“fixed-delay”;如果第一次执行的时间被delay了,随后的执行时间按照上一次实际执行完成时间点进行计算
2>scheduleAtFixedRate方法
“fixed-rate”;如果第一次执行时间被delay了,随后的执行时间按照上一次开始的时间点进行计算,并且为了赶上进度会多次执行任务,因此TimerTask中的执行需要考虑同步
(2)任务执行时间超出周期间隔
1>schedule方法
下一次执行时间相对于上一次实际执行完成的时间点,因此执行时间会不断延后
2>scheduleAtFixedRate方法
下一次执行时间相对于上一次开始的时间点,因此执行时间一般不会延后,因此存在并发性
四、Timer的缺陷
1、管理并发任务的缺陷
Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符
2、当任务抛出异常时的缺陷
如果TimerTask抛出RuntimeExcetion,Timer会停止所有任务的运行
3、Timer使用的禁区
(1)对时效要求较高的多任务并发作业
(2)对复杂的任务的调度
阅读全文
0 0
- Java定时任务调度工具详解之Timer篇
- Java定时任务调度工具详解之Timer
- java定时任务调度工具之Timer
- 定时任务调度工具之Timer(一)
- 定时任务调度工具之Timer(二)
- 定时任务调度工具之Timer(三)
- 定时任务调度工具之Timer(四)
- Java定时任务调度工具-Timer
- Java定时调度任务详解之Timer篇
- Java定时任务调度之Timer
- java定时任务调度之Timer
- 定时任务调度之Timer
- java定时任务调度Timer
- Java定时任务调度工具详解之Quartz篇
- java定时任务调度工具Timer和Quartz
- Java并发定时任务调度之Timer和ScheduledExecutorService
- 定时任务调度之Timer----入门小试牛刀
- java调度任务之Timer
- uva 10723 Cyborg Genes
- HDU
- 全球顶级黑客对决AI GeekPwn2017黑客大赛看点全面曝光
- opencv——计算轮廓的周长、所包含面积、中心点
- TCP Socket编程(非阻塞模式)(C++)
- Java定时任务调度工具详解之Timer
- 随机生成手机号的java代码
- HDU
- ACM-动态规划专题总结
- 苹果最新AI人才报告:最喜欢“挖角”微软和亚马逊,但钱和手速都落后对手
- Mysql架构组成之存储引擎压力测试
- 浅谈对Hadoop中HDFS、MapRecuce及YARN的初步认知
- HDU 1009 FatMouse' Trade
- 关于mysql 取昨日数据