今天研究了一下Java的定时器,下面简单说一下并给出案例 ## 简介 ## 定时器顾名思义就是起到定时作用,定时执行任务,启动一个定时器,其底层就会启动一个线程,你也可以理解,定时器是就是定时启动一个线程去执行你所要执行的任务!! 要了解定时器,做要了解jdk带的“Timer”和“TimerTask”,
Timer:我理解是定时器的工具,起到定时作用,和你所要执行的内容无关。TimerTask是一个接口共实现,这个接口底层又实现了线程接口Runnable,所有必须重写 run方法, 这也印证了上面我说的定时器是启动线程执行任务!
Timer主要有几个构造方法: 1.time.schedule(TimerTask task, Date time);参数 task是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! 2.time.schedule(TimerTask task, Date time,Long long); 是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间! 3.boolean cancel():用于取消计时器任务。 4.scheduleAtFixedRate(TimerTask task, Date time, long long):是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间! 注意: time.schedule(TimerTask task, Date time,Long long)和scheduleAtFixedRate(TimerTask task, Date time, long long) 这两个构造方法看是一样,但是内部不一样: schedule(TimerTask task, Date time,Long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“开始”时间来计算 scheduleAtFixedRate(TimerTask task, Date time, long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“结束”时间来计算 简单定时任务案例:
package Thread; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test3 { private static Timer time=new Timer();//初始化定时器工具 public static void main(String[] args) { try { MyTask1 mt=new MyTask1();//初始化定时任务 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime="2017-09-01 15:22:00"; Date date=sdf.parse(strTime);//设置定时器起始时间 time.schedule(mt, date); } catch (Exception e) { e.printStackTrace(); } } } /** * 定时任务 * @author user * */ class MyTask1 extends TimerTask{ /** * 所要定时的内容写在run里面 */ @Override public void run(){ try { System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString()); Thread.sleep(3000);//暂停3秒 System.out.println("运行了MyTASK 结束运行时间:"+new Date().toLocaleString()); } catch (Exception e) { e.printStackTrace(); } } }控制台打印结果: 可以看出来运行时间和设定时间一致!
循环案例
package Thread; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test1 { private static Timer time=new Timer(); public static void main(String[] args) { try { MyTask mt= new MyTask(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime="2017-09-01 16:19:00"; Date date=sdf.parse(strTime); time.schedule(mt,date,2000);//循环 } catch (Exception e) { e.printStackTrace(); } } static class MyTask extends TimerTask{ @Override public void run(){ try { System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString()); } catch (Exception e) { e.printStackTrace(); } } } }可以看出来每隔两秒执行一次
