0

我有一个程序(线程),它在云上的远程机器上启动一个任务。我想监控这个任务的进度,如果超过了特定的超时时间T,那么它将被取消并添加更多的云资源,任务将重新开始。

如何监视正在执行此任务的线程?

示例场景:

  1. 超时 = 1 小时,任务在 40 分钟内完成,因此一切都应该正常终止。

  2. 超时 = 1 小时,由于资源不足,任务在 55 分钟后失败,因此添加了更多资源并重新启动任务

  3. 超时 = 1 小时,1 小时后任务没有完成,因此它被杀死并添加了更多资源,然后任务再次启动。

那么如何在java中实现及时监控呢?

4

2 回答 2

2

您正在寻找的ScheduledThreadPoolExecutor课程正是这样做的。

于 2013-07-23T17:44:29.410 回答
2

您可以将任务提交给 ExecutorService,尝试通过超时获取结果,如果超时,请取消任务。

它可能看起来像:

ExecutorService executor = Executors.newFixedThreadPool(1);
Future<?> future = executor.submit(yourTask);
try {
    future.get(1, TimeUnit.HOURS);
} catch (TimeoutException e) {
    future.cancel(true);
    resubmitWithMoreResources();
} catch (ExecutionException e) {
    Throwable underlyingCause = e.getCause();
    if (underlyingCause instanceof ResourceException) {
        resubmitWithMoreResources();
    } else {...}
}
于 2013-07-23T17:46:14.880 回答