定时器
public class TimerDemo01 {
public static void main(String[] args) {
//1. 创建Timer定时器
Timer timer = new Timer();//定时器本身就是一个单线程
//2. 调用方法,处理定时任务
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行一次");
}
},3000,2000);
}
}
Timer定时器的特点和存在的问题
1、Timer是单线程,处理多个任务按照顺序执行,存在延时与设置定时器的时间有出入。
2、可能因为其中的某个任务的异常使Timer线程死掉,从而影响后续任务执行。
--------------------------------------------------------------------------
ScheduledExecutorService定时器
public class TimerDemo02 {
public static void main(String[] args) {
//1. 创建ScheduledExecutorService线程池
ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
//2. 开启定时任务
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行AAA");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},0,2, TimeUnit.SECONDS);
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行输出"+new Date());
}
},0,2, TimeUnit.SECONDS);
}
}
ScheduledExecutorService的优点
1、基于线程池,某个任务的执行情况不会影响其他定时任务的执行。