以下代码,任务1,1/0出异常,任务2就不执行
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@SneakyThrows
@Override
public void run() {
System.out.println("1");
int i=1/0;
Thread.sleep(1000);
}
};
timer.schedule(task,1000);
TimerTask task2 = new TimerTask() {
@SneakyThrows
@Override
public void run() {
System.out.println("2");
Thread.sleep(1000);
}
};
timer.schedule(task2,1000);
}
如下图,2不执行了
通过线程池解决出错阻塞问题
public static void main(String[] args) {
ScheduledExecutorService service = scheduledExecutorService();
service.schedule(() -> {
System.out.println("1");
int i = 1 / 0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, 1, TimeUnit.SECONDS);
service.schedule(() -> {
System.out.println("2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, 1, TimeUnit.SECONDS);
}
//线程池
public static ScheduledExecutorService scheduledExecutorService() {
return new ScheduledThreadPoolExecutor(
100,
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy()
);
}
如下图,2也执行了