Timer:时间调度器,定时启动线程执行任务
TimerTask:实现run方法的接口
Timer方法:
public void schedule(TimerTask task, long delay)
public void schedule(TimerTask task, Date time) //执行一次,间隔delay(ms),在time这个时间执行
public void schedule(TimerTask task, long delay, long period)
public void schedule(TimerTask task, Date firstTime, long period) //循环执行,开始delay、firstTime;每间隔period(ms)执行一次
public void scheduleAtFixedRate(TimerTask task, long delay, long period) //循环调用,和schedule的区别,考虑到CPU存在时间延迟,而存在。schedule 若在5/10/15执行,但由于CPU资源原因,第一次延迟2s执行,实际可能:7/12/17;scheduleAtFixedRate会计算延迟时间,尽量保证5/10/15执行。
构造Timer
public Timer() {
this(“Timer-” + serialNumber());
}
public Timer(boolean isDaemon) {
this(“Timer-” + serialNumber(), isDaemon);
}
停止定时器
public void cancel() {
synchronized(queue) {
thread.newTasksMayBeScheduled = false;
queue.clear();
queue.notify(); // In case queue was already empty.
}
}
批量定时处理:
Executors.newScheduledThreadPool
运用(Timer和定时池)
public class TimerTest {
public static void main(String[] args) {
new AA().start();
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
scheduledExecutorService.scheduleAtFixedRate(new AA(),1000,1000,TimeUnit.MILLISECONDS);
scheduledExecutorService.shutdown();
}
}
class AA extends Thread{
@Override
public void run() {
System.out.println("run");
Timer timer = new Timer(true);
timer.cancel();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("定时处理 ");
}
},1000,1000);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("over");
}
}