定时任务调度之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());}}


原创粉丝点击