如何检查Java线程是否以异常终止?

时间:2014-12-24 16:37:05

标签: java multithreading

给定一个已完成某项工作的线程(其状态为Thread.State.TERMINATED),是否有一种方法可以理解该线程是否已正确完成Thread.run()/ Runnable.run()方法或具有扔了一个未被捕的扔掉?

Afaik,一个线程在正常退出和抛出throwable时都进入TERMINATED状态。

有人建议使用UncaughtExceptionHandler。假设一个线程只能有一个UncaughtExceptionHandler(除了所有线程的默认值),并且线程代码可以改变提供的线程,那么使用它们是一个好习惯吗?

4 个答案:

答案 0 :(得分:2)

你看过Thread.setUncaughtExceptionHandler吗?

如果您在线程上有句柄,这可以让您捕获未处理的异常吗?

答案 1 :(得分:2)

您可以安装UncaughtExceptionHandler或设置default UncaughtExceptionHandler并让它保存线程退出的异常。

答案 2 :(得分:1)

您感兴趣的功能可以使用Callable在try {} catch块中包装run方法来完成,并在Future对象中返回它遇到问题的Exception

答案 3 :(得分:0)

我不知道是否有办法直接执行此操作,但您可以使用try / catch语句在run方法中包围所有代码。如果你创建一个布尔值并在它以异常终止时将其设置为true,那么你可以检查状态,如果布尔值为true,它将以异常终止,如果布尔值为假,则它会正确关闭。 可能有更好的方法,但这应该有效。