2013-07-23 74 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

相關問題