本文主要介绍TimerTask和Timer方式
一:Timer
public class Timer extends Object
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
二:TimerTask
由 Timer 安排为一次执行或重复执行的任务。
实现了runnable接口哦
三:
timer:调度器
timertask:计划任务
调度器安排计划任务,定期执行。
比如可以实现:
每天某时刻执行某任务,
马上间隔某时间段执行某任务。如下:
void | schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。 |
void | schedule(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。 |
void | schedule(TimerTask task, long delay) 安排在指定延迟后执行指定的任务。 |
void | schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 |
void | scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定速率执行。 |
void | scheduleAtFixedRate(TimerTask task, long delay, long period) 安排指定的任务在指定的延迟后开始进行重复的固定速率执行 |
之前的一个PM说,不要用timer,说这个很不准确,那么看看下面,是不是这个原因:
关于固定延迟和固定速率:
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行, 则将快速连续地出现两次或更多次执行,从而使后续执行能够赶上来。
public void schedule(TimerTask task, Date firstTime, long period)
如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。
四:code
public class TaskStart {
public static void main(String[] args) {
Timer timer = new Timer();
// timer.schedule(new Task(), new Date(),500);
timer.scheduleAtFixedRate(new Task(), new Date(), 500);
}
}
public class Task extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println(new Date());
} catch (Exception e) {
e.printStackTrace();
}
}
}
五:
其实这个能满足大部分需求了,有意见请拍砖。