本人小白一个,今天开始写博客,算是一个笔记吧。以后翻起来也许会有用,无论是对于谁来说。
定时任务就是给定一个时间点、时间间隔或给定一个执行次数然后去自动执行的任务。
了解到两个类,一个Timer,一个Quartz,其中Timer是jdk提供的能实现大多数简单任务调度的类。
Timer:有且仅有一个后台线程对多个业务线程进行定时定频率的调度。
其中的方法有:schedule(task,time)
task:被预定的任务,需继承TimerTask。time一个时间点,Date类型。表示当时间等于或早于现在的时间执行task一次。早于当前时间的话会立即执行。
schedule(task,time,period)
task:被预定的任务,需继承TimerTask。time一个时间点,Date类型。period,long整型。每隔period毫秒执行一次task,时间等于或超过timer时首次执行task。
schedule(task,delay)
task:被预定的任务,需继承TimerTask。delay,long整型。表示距离当前时间delay毫秒后执行一次task。
schedule(task,delay,period)
task:被预定的任务,需继承TimerTask。delay,long整型。period,long整型。表示在当前时间delay毫秒后开始执行task,而且之后每隔period毫秒执行一次。
cancel();表示取消所有任务。
timer.purge():移除取消的任务,返回取消的任务数量
scheduleAtFixedRate()方法基本与上述schedule方法一致。区别在于两点:
(1)当task执行时间超过预定的周期时间period,schedule方法顺序执行,意思当task执行完再执行下一次。而scheduleAtFixedRate方法以period为标准执行,与task并行,有一定的并发性。
(2)当执行时间早于当前时间时:schedule在当前时间开始执行而scheduleAtFixedRate方法按照执行时间开始执行只不过会尽快执行数次赶上当前时间继续正常执行。
下面给出实例代码:
public class MyTimer {
public static void main(String[] args) {
Timer timer = new Timer();
//当前时间两秒后开始每一秒执行一次MyTimerTask里的run()方法
timer.schedule(new MyTimerTask("huhuhu"), 2000L, 1000L);
//timer.cancel();//取消所有任务
timer.purge();//移除取消的任务,返回取消的任务数量
long a = new MyTimerTask("huhuhu").scheduledExecutionTime();
System.out.println(a);
}
}
public class MyTimerTask extends TimerTask{ String name; public MyTimerTask(String inputName){ this.name = inputName; } @Override public void run() { System.out.println(this.scheduledExecutionTime());//返回距离最近安排执行的时间 System.out.println("当前名称:"+this.name); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } cancel();//此任务的取消。timer中cancel()方法表示取消所有任务 } public String getName() { return name; } public void setName(String name) { this.name = name; } }
最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的