多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。 |
阿里巴巴规约扫描提示 Timer执行多个task,当一个task抛出异常所存在缺陷的问题。
由于Timer是单线程的,当执行多个任务时,一个任务抛出异常,接下来的任务就不会再继续执行。
例子一、使用timer执行两个任务,第二个任务为周期性任务(每隔一段时间执行一次)
/**
* timer执行两个任务
*/
@Test
public void TimerDemo1() {
final TimerTask task1 = new TimerTask(){
@Override
public void run()
{
System.out.println("99999");
// throw new RuntimeException();
}
};
final TimerTask task2 = new T