给定一个已完成某项工作的线程(其状态为Thread.State.TERMINATED),是否有一种方法可以理解该线程是否已正确完成Thread.run()/ Runnable.run()方法或具有扔了一个未被捕的扔掉?
Afaik,一个线程在正常退出和抛出throwable时都进入TERMINATED状态。
有人建议使用UncaughtExceptionHandler。假设一个线程只能有一个UncaughtExceptionHandler(除了所有线程的默认值),并且线程代码可以改变提供的线程,那么使用它们是一个好习惯吗?
答案 0 :(得分:2)
你看过Thread.setUncaughtExceptionHandler吗?
如果您在线程上有句柄,这可以让您捕获未处理的异常吗?
答案 1 :(得分:2)
您可以安装UncaughtExceptionHandler或设置default UncaughtExceptionHandler并让它保存线程退出的异常。
答案 2 :(得分:1)
您感兴趣的功能可以使用Callable
在try {} catch块中包装run方法来完成,并在Future对象中返回它遇到问题的Exception
答案 3 :(得分:0)
我不知道是否有办法直接执行此操作,但您可以使用try / catch语句在run方法中包围所有代码。如果你创建一个布尔值并在它以异常终止时将其设置为true,那么你可以检查状态,如果布尔值为true,它将以异常终止,如果布尔值为假,则它会正确关闭。 可能有更好的方法,但这应该有效。