我需要某种任务调度程序,它将调度任务的执行(一次)并监视任务是否仍然“活动”,因此如果发生一些未捕获的异常(如 IOexception 或数据库连接失败) - 调度程序将从头开始重新开始任务。
我不想在 while(true) 循环中捕获 Throwable,只想让它失败。
理想情况下,应该创建新线程。
有现成的东西吗?用 ThreadFactory 实现这种调度程序很简单,仍然不确定我是否应该重新发明轮子。
我需要某种任务调度程序,它将调度任务的执行(一次)并监视任务是否仍然“活动”,因此如果发生一些未捕获的异常(如 IOexception 或数据库连接失败) - 调度程序将从头开始重新开始任务。
我不想在 while(true) 循环中捕获 Throwable,只想让它失败。
理想情况下,应该创建新线程。
有现成的东西吗?用 ThreadFactory 实现这种调度程序很简单,仍然不确定我是否应该重新发明轮子。
Quartz是一个非常好的调度器;这是一些重试失败代码
尝试这个
Runnable task = new Runnable() {
@Override
public void run() {
throw new RuntimeException();
}
};
for (;;) {
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> f = ex.schedule(task, 1000, TimeUnit.MILLISECONDS);
try {
f.get();
break;
} catch (InterruptedException e) {
f.cancel(true);
break;
} catch (ExecutionException e) {
// process exception
} finally {
ex.shutdown();
}
}
如果在任务执行过程中发生异常 f.get() 会抛出 ExecutionException,你可以处理它并重新调度