1 回答

TA貢獻1805條經(jīng)驗 獲得超10個贊
我遇到了一些異常,進一步執(zhí)行停止。
ScheduledExecutorService.scheduleAtFixRate()
這是根據(jù)規(guī)范的預期行為:
如果任務的任何執(zhí)行遇到異常,則后續(xù)執(zhí)行將被抑制。
關于您的需求:
我想捕獲系統(tǒng)關閉我的應用程序的異常。
我應該使用第三個線程來處理異常,該線程同時監(jiān)視未來并處理異常,還是有其他更好的方法?
處理未來的回報看起來ScheduledFuture.get()
是正確的。根據(jù)ScheduledFuture.scheduleAtFixedRate()
規(guī)格:
否則,任務只會通過取消或終止執(zhí)行者來終止。
所以你甚至不需要創(chuàng)建一個新的預定未來。
只需運行兩個并行任務(ExecutorService
也可以使用一個或兩個線程),等待get()
每個任務Future
并在任務中拋出異常時停止應用程序:
Future<?> futureA = ses1.scheduleAtFixRate(..) // for thread 1
Future<?> futureB = ses2.scheduleAtFixRate(..) // for thread 2
submitAndStopTheApplicationIfFail(futureA);
submitAndStopTheApplicationIfFail(futureB);
public void submitAndStopTheApplicationIfFail(Future<?> future){
executor.submit(() -> {
try {
future.get();
} catch (InterruptedException e) {
// stop the application
} catch (ExecutionException e) {
// stop the application
}
});
}
添加回答
舉報