Java定时任务调度工具-Timer
来源:互联网 发布:java api1.6文档下载 编辑:程序博客网 时间:2024/06/06 07:48
定时任务的几种实现,从技术上来分类,目前主要有三种技术(或者说有三种产品):
1.Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少
2.使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂
3.Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多
Timer简介
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
Timer的基本使用
public class MyTimerTask extends TimerTask { private String name; public MyTimerTask(String inputName){ name=inputName; } @Override public void run() { System.out.println("Current exec name is:"+name); } public String getName() { return name; } public void setName(String name) { this.name = name; }}
public class MyTimer { public static void main(String[] args) { Timer timer=new Timer(); MyTimerTask myTimerTask=new MyTimerTask("No.1"); //通过timer定时定频率的调用myTimerTask的业务逻辑: //即第一次执行是在当前时间的2s之后,之后每隔1s执行一次 timer.schedule(myTimerTask,2000L,1000L); }}
使用 Timer 实现任务调度的核心类是 Timer 和 TimerTask。其中 Timer 负责设定 TimerTask 的起始与间隔执行时间。使用者只需要创建一个 TimerTask 的继承类,实现自己的 run 方法,然后将其丢给 Timer 去执行即可
Timer定时函数的用法:
Timer提供了schedule方法,该方法有多中重载方式来适应不同的情况,如下:
1.schedule(TimerTask task, Date time):在等于或超过time时间后执行且执行一次task2.schedule(TimerTask task, Date firstTime, long period) :安排指定的任务在指定的时间开始进行重复的固定延迟执行3.schedule(TimerTask task, long delay) :安排在指定延迟后执行指定的任务4.schedule(TimerTask task, long delay, long period) :安排指定的任务从指定的延迟后开始进行重复的固定延迟执行
同时也重载了scheduleAtFixedRate方法,scheduleAtFixedRate方法与schedule相同,只不过他们的侧重点不同:
1.scheduleAtFixedRate(TimerTask task, Date firstTime, long period):安排指定的任务在指定的时间开始进行重复的固定速率执行2.scheduleAtFixedRate(TimerTask task, long delay, long period):安排指定的任务在指定的延迟后开始进行重复的固定速率执行
其他的重要函数之Timer:
1.cancel():终止此计时器,丢弃所有当前已经安排的任务2.purge():从此计时器的任务队列中移除所有已经取消的任务,返回值是移除的任务数
其他的重要函数之TimerTask:
1.boolean cancel():取消此计时器任务2.long scheduledExecutionTime():返回此任务最近实际执行的安排执行时间
分析schedule和scheduleAtFixedRate的不同:这个网上很多,自己谷歌了!!!
Timer的缺陷
Timer管理时间延迟缺陷(即管理并发任务的缺陷):
前面Timer在执行定时任务时只会创建一个线程任务,如果存在多个线程,若其中某个线程因为某种原因而导致线程任务执行时间过长,超过了两个任务的间隔时间,会发生一些缺陷
Timer抛出异常缺陷:
如果TimerTask抛出RuntimeException,Timer会终止所有任务的运行
对于Timer的缺陷,我们可以考虑 ScheduledThreadPoolExecutor 来替代。Timer是基于绝对时间的,对系统时间比较敏感,而ScheduledThreadPoolExecutor 则是基于相对时间;Timer是内部是单一线程,而ScheduledThreadPoolExecutor内部是个线程池,所以可以支持多个任务并发执行
- Java定时任务调度工具-Timer
- java定时任务调度工具之Timer
- java定时任务调度Timer
- Java定时任务调度工具详解之Timer篇
- java定时任务调度工具Timer和Quartz
- Java定时任务调度工具详解之Timer
- 定时任务调度工具之Timer(一)
- 定时任务调度工具之Timer(二)
- 定时任务调度工具之Timer(三)
- 定时任务调度工具之Timer(四)
- Java定时任务调度之Timer
- java定时任务调度之Timer
- Java定时任务调度工具
- 定时任务调度之Timer
- Quartz---Java定时任务调度工具
- java定时任务调度工具-quartz
- java的调度器timer定时执行指定任务
- Java并发定时任务调度之Timer和ScheduledExecutorService
- Linux下的共享内存
- python leetcode相关题目
- OpenGL 矩阵 行序 列序
- (三)UI绘制流程-流式布局
- 2011蓝桥杯 最小公倍数 NOYJ517
- Java定时任务调度工具-Timer
- 实现手机左右滑屏效果
- 2017暑期实习面经分享(大数据&Java&后台)
- c++---回文数
- Tornado——一个异步web服务器
- Java首选项Preferences
- 分割字符串
- oracle提示TNS:无监听程序的解决办法
- 线段数总结