【发布时间】:2014-08-20 13:02:06
【问题描述】:
假设在我的应用程序中有一个线程正在执行函数说:
public void function(){
.
.
.
try{
//do something
}catch(Exception ex){
throw ex;
}
}
现在线程每次执行函数时,都会去catch块,然后抛出异常ex,甚至父函数也会向其父函数抛出异常。 现在的问题是我的线程会死掉还是会导致 mu 应用程序中的线程泄漏?
【问题讨论】:
-
只返回不要抛出任何会结束线程的东西
-
当
run()方法结束/返回时线程将停止执行,无论它调用的其他方法如何结束。就资源而言,您需要手动处理(关闭)它们。 -
那么在这种情况下,你的意思是线程不会消亡并且会继续持有资源?
-
未捕获(或捕获)的异常不会改变线程的生命周期。代码将抛出异常,并假设您没有配置处理程序来捕获它,系统的默认处理程序会将其打印到 sys.out 并退出线程。没有什么会消亡或被杀死。如果你在 try 中打开了一些文件或套接字,但在关闭它之前抛出了异常,你应该使用 finally 块来关闭它们。想象一下你的主线程方法中的相同情况以及你在那里处理它们的方式,你也应该在这里做。
-
@user3363969 - 不,线程将在 run 完成时终止。
标签: java multithreading memory-leaks