[英]Robust task scheduler with task restart on failure
我需要某種任務調度程序,它將調度一次任務的執行(一次)並監視任務是否仍然“處於活動狀態”,因此,如果發生某些未捕獲的異常(例如IOexception或數據庫連接失敗),調度程序將從頭開始重新啟動任務。
我不想在while(true)循環中遇到Throwable,只是想讓它失敗。
理想情況下,應該創建新線程。
有准備好使用的東西嗎? 用ThreadFactory實現這種調度程序很簡單,但仍不確定是否應該重新發明輪子。
Quartz是一個非常好的調度程序。 這是一些失敗重試代碼
嘗試這個
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,則可以對其進行處理並重新計划
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.