定时任务调度之Timer----入门小试牛刀
来源:互联网 发布:excel怎么去重复数据 编辑:程序博客网 时间:2024/05/21 04:41
一个小Demo:
package com.haige.oneself;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Timer;import java.util.TimerTask;public class TaskByOneSelf {public static void main(String[] args) {// TODO Auto-generated method stub/* * 获取当前时间,并设置成距离当前3秒之后的时间 * 如党建时间是2017-10-20 10:59:57 * 则设置后的时间则为2017-10-20 11:00:00 */ Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sf.format(calendar.getTime())); calendar.add(Calendar.SECOND, 5); //第一次执行为6秒前,之后每隔两秒钟执行一次 Timer timer = new Timer(); timer.schedule(new TimerTask() {@Overridepublic void run() { //定时器执行体// TODO Auto-generated method stub//打印当前计划执行的时间System.out.println("任务执行的时间是: " + sf.format(scheduledExecutionTime()));System.out.println("任务开始执行!");}}, calendar.getTime(),2000);}}
将TimerTask抽象成接口,实现可复用性与可维护性
package com.haige.timetask;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.TimerTask;/* * 负责分配线程任务 */public class MyTimerTask extends TimerTask {private String name;private Integer count = 0; //计时器public MyTimerTask(String InputName) {super();name = InputName;}public String getName() {return name;}public void setName(String name) {this.name = name;}/* * timer的执行体 */public void run() {// TODO Auto-generated method stubif(count<5){ //以yyyy-MM-dd HH:mm:ss的格式打印当前执行时间//如2016-16-11 14:30:48 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("Timer定时器的执行时间为 :" + sf.format(calendar.getTime()));//打印当前name的内容System.out.println("Timer定时器执行的名称为: " + name);count ++;}else{cancel(); //取消任务的执行System.out.println("任务超过执行次数,成功取消!");}}}
package com.haige.timer;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;import com.haige.timetask.MyTimerTask;public class MyTimer {public static void main(String[] args) {// TODO Auto-generated method stub //创建一个Timer实例 Timer timer = new Timer(); //创建一个MyTimerTask实例 MyTimerTask myTimerTask = new MyTimerTask("第一个TimerTask"); MyTimerTask myTimerTask2 = new MyTimerTask("第二个TimerTask"); //通过Timer定时定频率调用MyTimerTask的业务范围 //即第一次执行是在当前时间的3秒之后,之后每隔2秒钟执行一次 timer.schedule(myTimerTask, 5000L, 6000L); /* * 获取当前时间,并设置成距离当前3秒之后的时间 * 如党建时间是2017-10-20 10:59:57 * 则设置后的时间则为2017-10-20 11:00:00 */ Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sf.format(calendar.getTime())); calendar.add(Calendar.SECOND, 3); //schedule的用法 /* * 1.在时间等于或超过time的时候执行且只执行一次task * 如在2017-10-20 11:00:00执行一次task:打印任务的名字 */ myTimerTask.setName("schedule NO.1"); timer.schedule(myTimerTask, calendar.getTime()); /* * 2.时间等于或超过time时首次执行task * 之后每隔period毫秒重复执行一次task * 如在2017-10-20 11:00:00执行一次task:打印任务的名字 * 之后每隔两秒执行一次task */ myTimerTask.setName("schedule NO.2"); timer.schedule(myTimerTask, calendar.getTime(), 2000); /* * 3.在等待delay毫秒之后执行且只执行一次task * 如现在是2017-10-20 11:00:00 * 则在2017-10-20 11:00:00执行一次task,打印任务的名字 */ myTimerTask.setName("schedule NO.3"); timer.schedule(myTimerTask, 3000); System.out.println("scheduleAtFixedRate 执行后的时间为: " + sf.format(myTimerTask.scheduledExecutionTime())); /* * 4.等待delay毫秒后首次执行task * 之后每隔period毫秒重复执行一次task * 如现在是2017-10-20 11:00:00 * 则在2017-10-20 11:00:00 第一次执行task,打印任务的名字 * 之后每隔两秒执行一次task */ myTimerTask.setName("schedule NO.4"); timer.schedule(myTimerTask, 3000, 2000); //scheduleAtFixedRate的用法 /* * 1.时间等于或超过time时首次执行task * 之后每隔period毫秒重复执行一次task * 如在2017-10-20 11:00:00执行一次task:打印任务的名字 * 之后每隔两秒执行一次task */ myTimerTask.setName("scheduleAtFixedRate NO.1"); timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000); /* * 2.等待delay毫秒后首次执行task * 之后每隔period毫秒重复执行一次task * 如现在是2017-10-20 11:00:00 * 则在2017-10-20 11:00:001 第一次执行task,打印任务的名字 * 之后每隔两秒执行一次task */ myTimerTask.setName("scheduleAtFixedRate NO.2"); timer.scheduleAtFixedRate(myTimerTask, 3000, 2000); /* * 取消任务数的测试 */ timer.schedule(myTimerTask, 3000, 2000); timer.schedule(myTimerTask2, 2000, 3000); System.out.println("当前已取消的任务数是 : " + timer.purge()); //线程休眠5秒 try {Thread.sleep(5000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //获取当前的执行时间,并打印 Date cancelTime = new Date(); System.out.println("任务取消时间为 :" + sf.format(cancelTime)); //取消所有任务 myTimerTask2.cancel(); System.out.println("当前已取消的任务数是 : " + timer.purge());}}
阅读全文
0 0
- 定时任务调度之Timer----入门小试牛刀
- 定时任务调度之Timer
- Java定时任务调度之Timer
- java定时任务调度工具之Timer
- 定时任务调度工具之Timer(一)
- 定时任务调度工具之Timer(二)
- 定时任务调度工具之Timer(三)
- 定时任务调度工具之Timer(四)
- java定时任务调度之Timer
- java定时任务调度Timer
- Java并发定时任务调度之Timer和ScheduledExecutorService
- Java定时任务调度工具详解之Timer篇
- Java定时调度任务详解之Timer篇
- Java定时任务调度工具详解之Timer
- 定时任务调度之Timer---综合使用小案例
- Java定时任务调度工具-Timer
- 任务调度之Timer、TimerTask
- java调度任务之Timer
- [译]Time Series Forecasting with the Long Short-Term Memory Network in Python
- Java的switch语句的注意事项
- adb 命令(部分)
- 迭代器模式
- jsp自定义标签
- 定时任务调度之Timer----入门小试牛刀
- MySQL数据库概述;mysql数据库的安装。MySQL数据库的存储方式概述;SQL概述:结构化查询语言
- Java的switch语句模拟单项选择题
- 网络安全-CSRF跨站伪装脚本注入
- 从linux启动到rootfs的挂载分析
- distutils Unknown MS Compiler version
- Linux基础练习题(8)
- SQL操作数据库,创建数据库,查看所有的数据库,对数据库进行增删改,查看当前使用的数据库
- [SpringBoot学习]-IDEA创建Gradle多Module结构的SpringBoot项目