Timer可以实现定时功能,Timer的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。并且如果一个任务有异常,后续的任务就都中断了。
建议使用
Timer timer = new Timer();
TimerTask task1 = new TimerTask(){
@Override
public void run() {
System.out.println("task 1");
int i = 1/0;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
TimerTask task2 = new TimerTask(){
@Override
public void run() {
System.out.println("task 2");
}
};
// 使用timer 添加两个任务,希望它们都在1s后执行
// 但由于 timer 内只有一个线程来顺序执行队列中的任务,因此任务1的延时,影响了任务2 的执行
timer.schedule(task1,1000);
timer.schedule(task2,1000);