2013-07-23 43 views
0

我有一个程序(线程)在云上的远程计算机上启动任务。我想监视此任务的进度,如果超过了特定的超时时间T,那么它将被取消,更多云资源将被添加,任务将重新开始。如何在不使用Thread.sleep的情况下在java中执行定期检查?

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

示例方案:

  1. Timout = 1小时后,该任务在40分钟结束时,因此一切都应该正常终止。

  2. Timout = 1个小时,任务后55分钟失败,原因是缺乏资源,因此更多的资源,并将任务再次启动

  3. Timout = 1个小时,任务没有1后完成小时,因此它的死亡和更多的资源添加,然后任务再次开始。

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

回答

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 {...} 
} 
2

您正在寻找ScheduledThreadPoolExecutor类,它的确如此。

+0

我不知道这是最简单的方法。 – assylias

+0

我通过快速浏览这个课程了解到,它允许调度任务在特定时间运行,但如何在超时情况下监控任务。你能解释更多吗? – Sami

相关问题