在新的执行线程中使用 catch throwable 或 catch Exception

rk2*_*010 5 java try-catch

我需要在启动新线程时找出 try-catch 的最佳实践。

就我个人而言,我更喜欢选项 2。

哪个选项是最佳实践?是否有任何因素可能使任一选项在某些情况下成为最佳实践,而在其他情况下则不然?

选项1

public void run(){
  try{
     //do something
   }catch(Exception e){
     // log 
   }
}
Run Code Online (Sandbox Code Playgroud)

选项 2

public void run(){
  try{
     //do something
   }catch(Throwable t){
     // log
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:假设您正在编写必须满足严格代码审查的代码。编辑 2:我知道上述两个选项之间的区别。我只是好奇什么被其他人视为“100% 正确”。

Jér*_*nge 4

我会在线程上使用 setDefaultUncaughtExceptionHandler(...) 来捕获可运行对象未正确处理的内容,但是当涉及可运行对象本身时,它实际上取决于它必须实现的目标并合理预期考虑合理的执行上下文。

另一方面,创建一个单独的线程来执行可运行程序并不是一个好的策略,恕我直言,FutureTask可以更好地处理这些问题。