多线程-当ScheduledExecutorService周期任务中抛异常之后的情况

2020年1月9日

18:56

先说结论:结论就是无论如何runnable中只要抛出异样并且没有被try catch包裹,该runnable以后的周期任务都会被取消,不会再周期执行。sheduleAtFixedRate中作业被取消!

如何知道是抛出的什么异常呢,使用thread.setUncaughtExceptionHandler()方法是不行的,因为他是在Thread被异常停止才会获取异常,而使用Executors线程不会被停止,所以无法用setUncaughtExceptionHandler()获取到异常信息。

那如何获取异常信息呢?使用ScheduleFuture类,如下:

 

注意,这段代码不是捕获异常!!一旦抛出异常,作业将被清除。这段代码只确保它不会悄无声息地发生,所以如果它发生了,您就知道它发生的时间和原因。让执行继续运行的惟一方法是用try/catch将所有内容包围起来

 多线程-当ScheduledExecutorService周期任务中抛异常之后的情况

参考:https://www.cosmocode.de/en/blog/schoenborn/2009-12/17-uncaught-exceptions-in-scheduled-tasks

https://stackoverflow.com/questions/6894595/scheduledexecutorservice-exception-handling

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-28
  • 2022-02-16
  • 2022-12-23
猜你喜欢
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案