猿问

异常处理 ScheduledExecutorService

我正在使用ScheduledExecutorService以固定间隔运行线程1 min

一个实例ScheduledExecutorService运行一个线程,另一个实例运行另一个线程。

例子:

ses1.scheduleAtFixRate(..) // for thread 1  
ses2.scheduleAtFixRate(..) // for thread 2

我遇到了一些异常,进一步执行停止。我想捕获系统关闭我的应用程序的异常。

我应该使用第三个线程来处理异常,该线程同时监视未来并处理异常,还是有其他更好的方法?会不会影响其他线程。

任何帮助表示赞赏!


宝慕林4294392
浏览 152回答 1
1回答

holdtom

我遇到了一些异常,进一步执行停止。ScheduledExecutorService.scheduleAtFixRate()这是根据规范的预期行为:如果任务的任何执行遇到异常,则后续执行将被抑制。关于您的需求:我想捕获系统关闭我的应用程序的异常。我应该使用第三个线程来处理异常,该线程同时监视未来并处理异常,还是有其他更好的方法?处理未来的回报看起来ScheduledFuture.get()是正确的。根据ScheduledFuture.scheduleAtFixedRate()规格:否则,任务只会通过取消或终止执行者来终止。所以你甚至不需要创建一个新的预定未来。只需运行两个并行任务(ExecutorService也可以使用一个或两个线程),等待get()每个任务Future并在任务中抛出异常时停止应用程序:Future<?> futureA = ses1.scheduleAtFixRate(..) // for thread 1&nbsp;&nbsp;Future<?> futureB = ses2.scheduleAtFixRate(..) // for thread 2submitAndStopTheApplicationIfFail(futureA);submitAndStopTheApplicationIfFail(futureB);public void submitAndStopTheApplicationIfFail(Future<?> future){&nbsp; &nbsp; &nbsp; executor.submit(() -> {&nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; future.get();&nbsp; &nbsp; &nbsp; } catch (InterruptedException e) {&nbsp; &nbsp; &nbsp; &nbsp; // stop the application&nbsp; &nbsp; &nbsp; } catch (ExecutionException e) {&nbsp; &nbsp; &nbsp; &nbsp; // stop the application&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });}
随时随地看视频慕课网APP

相关分类

Java
我要回答