定时任务是比较常用的功能之一,最近就有需求使用到了这个东西。看下面这段代码:
public class ScheduledErrorDemo {
private static ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
private static int count = 0;
public static void main(String[] args){
scheduledExecutorService.scheduleAtFixedRate(() -> {
count ++;
System.out.println(count + "--->" + new Date());
if(count == 3){
throw new RuntimeException("任务出错了");
}
},2000,5000, TimeUnit.MILLISECONDS);
}
}
执行之后:
再看下面这个代码:
public class ScheduledDemo {
private static ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
private static int count = 0;
public static void main(String[] args){
scheduledExecutorService.scheduleAtFixedRate(() -> {
count ++;
System.out.println(count + "--->" + new Date());
try {
if(count == 3){
throw new RuntimeException("任务出错了");
}
} catch (Exception e) {
System.out.println("发生错误");
}
},2000,5000, TimeUnit.MILLISECONDS);
}
}
然后看一下它的执行结果:
从上面两个程序中结果已经显而易见,对于定时线程ScheduledExecutorService的异常处理方式了,直接抛出来会导致线程一直抑制无法继续执行。这从方法签名的javadoc中也可以看出,所以大家使用中谨慎。