我有一个程序(线程),可以在云端的远程计算机上启动任务。我想监视此任务的进度,如果它超过特定的超时T,那么它将被取消,并且将添加更多的云资源,任务将重新开始。
如何监控正在执行此任务的线程?
示例场景:
Timout = 1小时,任务在40分钟内完成,因此一切都应该正常终止。
Timout = 1小时,由于资源不足,55分钟后任务失败,因此添加了更多资源,任务再次启动
Timout = 1小时,任务在1小时后没有完成,因此它被杀死并增加了更多资源,然后再次启动任务。
那么如何在java中实现及时监控呢?
答案 0 :(得分:2)
你正在寻找ScheduledThreadPoolExecutor
类,它正是这样做的。
答案 1 :(得分: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 {...}
}