Java基础--定时任务Timer
一、Timer介绍?java.util.Timer ?java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示: public abstract class TimerTask implements Runnable 可以通过继承该类,来实现自己的定时任务。 Timer定时器实例有多种构造方法: Timer() 创建一个新计时器。 Timer(boolean isDaemon) 创建一个新计时器,可以指定其相关的线程作为守护程序运行。 Timer(String name) 创建一个新计时器,其相关的线程具有指定的名称。 Timer(String name,boolean isDaemon) 创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。 ? 二、Timer方法定时执行方法1、在特定时间执行任务,只执行一次 public void schedule(TimerTask task,Date time) 2、在特定时间之后执行任务,只执行一次 public void schedule(TimerTask task,long delay) 3、指定第一次执行的时间,然后按照间隔时间,重复执行 public void schedule(TimerTask task,Date firstTime,long period) 4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行 public void schedule(TimerTask task,long delay,long period) 参数: delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行 period:重复执行的时间间隔 5、第一次执行之后,特定频率执行,与3同 public void scheduleAtFixedRate(TimerTask task,long period) 6、在delay毫秒之后第一次执行,后按照特定频率执行 public void scheduleAtFixedRate(TimerTask task,long period) ? 方法名称schedule()和scheduleAtFixedRate()两者的区别 <1>schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次 ? Timer注销 timer.cancel(); ? 三、案例1、特定时间后执行 public void schedule(TimerTask task,long delay) 参数: task为:执行任务 delay:时间毫秒数 方法的含义: 在delay毫秒后执行任务task,只执行一次。 案例: 1分钟后同步数据。 同步任务: package com.yank.framework.common; import java.util.TimerTask; public class SynchroTimerTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub System.out.println("Synchro data to other servers."); } } 定时任务: package com.yank.framework.common; import java.util.Timer; import java.util.TimerTask; public class SynchroTest { public static void main(String[] args) { // TODO Auto-generated method stub TimerTask task = new SynchroTimerTask(); Timer timer = new Timer(); timer.schedule(task,1000); } } ? ?2、案例2:按点吃饭 首先定义吃饭的任务,制定饭点,没小时进行检查,到点就吃饭。 package com.yank.framework.common; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimerTask; /* * 定时吃饭 * */ public class EatTimerTask extends TimerTask { //吃饭时间 private static List<Integer> eatTimes; /* * 静态初始化 * */ static { initEatTimes(); } /* * 初始化吃饭时间 * */ private static void initEatTimes(){ eatTimes = new ArrayList<Integer>(); eatTimes.add(8); eatTimes.add(12); eatTimes.add(18); } /* * 执行 * */ @Override public void run() { // TODO Auto-generated method stub Calendar calendar = Calendar.getInstance(); System.out.println("检查是否到了吃饭的点"); int hour = calendar.get(Calendar.HOUR_OF_DAY); if(eatTimes.contains(hour)) { System.out.println("饿了,吃饭..."); } } } ? 定时检查执行: package com.yank.framework.common; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class EatTimerTaskTest { public static void main(String[] arg){ TimerTask task = new EatTimerTask(); Calendar calendar= Calendar.getInstance(); Date firstTime = calendar.getTime(); //间隔:1小时 long period = 1000 * 60 * 60; //测试时间每分钟一次 //period = 1000 * 60; Timer timer = new Timer(); timer.schedule(task,firstTime,period); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |