什么是Timer?
timmer是java原生的用于定时任务的类。
Timer的使用
package com.chongba.schedule.jdk;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTaskTest {
public static void main(String[] args) {
Timer timer = new Timer("第一个定时器");
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(System.currentTimeMillis() / 1000 + "执行任务");
}
}, 1000L);
System.out.println(System.currentTimeMillis() / 1000);
}
Timer的常用方法
timer.schedule(); timer.timer.scheduleAtFixedRate(); 参数都与上述的案例大差不差
Timer的注意点
注意,当创建多个Timer定时任务时, 其中有一个Timer抛出异常 而没有被捕获时,那么其他的定时任务都会停止。 你以为会有代码, 但是并没有。 因为我懒
针对上述问题的优化, 可以更换自带线程池的Timer类。
no BB show u code
package com.chongba.schedule.jdk;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TimerTaskTest2 {
public static void main(String[] args) {
Timer time = new Timer("第二个timer");
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
for (int i = 0; i < 100; i++) {
int j = i;
scheduledExecutorService.schedule(new TimerTask() {
@Override
public void run() {
if(j == 20){
throw new RuntimeException();
}
System.out.println(j);
}
}, 1, TimeUnit.SECONDS);
}
}
}
总结一下,这两个类用起来都差不多。 但是明显ScheduledExecutorService 更好用,建议大家多用(个人意见)。
关于Timer的定位, 个人觉得更适合做一下延时操作。 例如,支付时,为你的订单操作延时半个小时,好让你操作完成。
|