java定时器Timer
来源:互联网 发布:win10用友软件 编辑:程序博客网 时间:2024/06/15 07:17
Java定时任务调度工具–Timer和Quart
Timer是JDK直接提供的,Quart是需要导入jar包的。
Timer只有一个后台线程去执行任务,Quart有多个线程执行。
Timer工具位于java.util.Timer中,可以上官方文档查看API.
TimerThread是后台的一个主线程,TaskQueue是一个业务线程TimerTask的一个队列。TimerTask调用其run方法实现业务逻辑。
其原理就是TimerThread定期调用TaskQueue中的TimerTask来实现定时任务。我们使用这个包时,只需关注Timer和TimerTask,其他两个对我们是透明的。
放上demo
Timer主类
package time;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Timer;public class MyTimer extends Timer{public static void main(String[] args){ //1.创建一个Timer实例 Timer timer = new Timer(); //2.创建一个TimerTasker实例 TimeTasker task2 = new TimeTasker("No.1"); //3.通过timer定时调用task1的业务逻辑 //即第一次执行是在当前时间的两秒之后,之后每隔一秒执行一次 //timer.schedule(task1, 2000L,1000L); //设置当前时间的后5秒 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current time is :" + sf.format(calendar.getTime())); calendar.add(Calendar.SECOND, 5); //-----------schedule的用法-----------// //1.按规定时间调度一次 //timer.schedule(task2, calendar.getTime()); //2.在规定时间执行,之后每隔固定时间再次执行 task2.setName("No.3"); timer.schedule(task2, calendar.getTime(),2000L); //3.在距离当前时间delay秒之后,执行一次task task2.setName("No.4"); timer.schedule(task2, 3000L); //4.在距离当前时间delay秒之后,执行一次task,之后每隔几秒钟之后再次执行 task2.setName("No.5"); timer.schedule(task2, 3000L,1000L); //接下来是scheduleAtFixedRate(,,,)和schedule有一点点不同,参数意义一样,函数 //实现的功能在一些特殊情况略有差异 task2.setName("scheduleAtFixedRate"); timer.scheduleAtFixedRate(task2, 2000L, 3000L); //-------------cancle的用法------------// //Timer下的cancel方法,终止这个计时器,丢弃所有当前安排的任务 //timer.cancel(); //timer.purge();移除队列中已经被取消的任务。 }}
TimerTask定时业务逻辑类
package time;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.TimerTask;public class TimeTasker2 extends TimerTask{private String name;public TimeTasker2(String name) { this.name = name;}public String getName() { return name;}public void setName(String name) { this.name = name;}@Overridepublic void run() { //打印当前那么的内容 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current exec time is :" + sf.format(calendar.getTime())); //打印当前name的内容 System.out.println("Current exec name is :" + name); //---TimerTask中的cancel能够取消他自己的定时任务 //scheduledExecutionTime()返回发生此任务执行安排的时间 Long型数据 }}
介绍一下schedule 和 scheduleAtFixedRate两个函数的区别
1.首次计划执行的时间早于当前的时间
schedule:如果第一次执行的时间被delay了,随后的执行时间按照上一次实际执行完成的时间点进行计算
即你打算让他在当前时间的前6秒开始执行,所以你运行程序的时候,他的执行时间显示的不是6秒前,而是当前时间
scheduleAtFixedRate:如果第一次执行的时间被delay了,随后的执行时间按照上一次开始的时间点进行计算,并且为了赶上进度会多次执行任务,因此TimerTask中的执行体需要考虑同步
2.任务执行所需要的时间超出任务的执行周期间隔
schedule:下一次执行时间相对与上一次实际执行完成的时间,因此执行时间会不断延后。
scheduleAtFixedRate:下一次执行时间相对于上一次开始的时间点,因此执行时间一般不会延后,因此存在并发性。
Timer的缺陷
1.管理并发任务的缺陷,两个task同时运行就会出错。不会同时执行,只能一个接一个。2.当任务抛出异常时的缺陷,当抛出异常时,Timer会停止所有任务的执行
阅读全文
0 0
- java定时器 Timer
- java中的定时器Timer
- java中timer定时器
- java定时器1:Timer
- JAVA Timer 定时器原理
- Java线程-Timer定时器
- java Timer 定时器
- java的定时器(Timer)
- java中的定时器Timer
- Timer 定时器类 java
- Java定时器Timer()
- java中Timer定时器
- java web定时器Timer
- java 定时器Timer
- Java基础:定时器Timer
- java timer 定时器
- java timer定时器
- java timer定时器
- 使用QT中的QT Style Sheet功能
- NB-IoT与eMTC技术的异同
- Hdu2096 小明A+B
- pytorch-loss function
- JAVA虚拟机--类加载机制(一)
- java定时器Timer
- 释万行上师:罕见的修行真相揭秘【全】
- 机器学习实战:k-临近算法(二)
- QT Creator的style sheet的几种用法(QT Creator)(StyleSheet)(样式)(QT4.7)(用法)
- 网络编程:HttpURLConnection使用介绍
- 前端面试题-正则表达式
- iOS开发:Swift里正则表达式的正确用法(限制TextField的文本输入,登录时判断正确的手机号)
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- go语言简史