1

我需要某种任务调度程序,它将调度任务的执行(一次)并监视任务是否仍然“活动”,因此如果发生一些未捕获的异常(如 IOexception 或数据库连接失败) - 调度程序将从头开始重新开始任务。

我不想在 while(true) 循环中捕获 Throwable,只想让它失败。

理想情况下,应该创建新线程。

有现成的东西吗?用 ThreadFactory 实现这种调度程序很简单,仍然不确定我是否应该重新发明轮子。

4

2 回答 2

1

Quartz是一个非常好的调度器;这是一些重试失败代码

于 2013-05-24T02:31:09.917 回答
0

尝试这个

    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,你可以处理它并重新调度

于 2013-05-24T02:21:25.330 回答