我的项目中有一个NullPointerException,我想评估这个问题的重要性。在线程完成任务并且无论如何都要死之前抛出异常。 我的代码没有抓住这个例外,所以线程已经死了。
以下是对情况的简单模拟:
public class Test extends Thread {
public static void main(String[] args) throws InterruptedException {
Test thread = new Test();
thread.start();
while(true) {
System.out.println("I'm still here!");
Thread.sleep(1000);
}
}
public void run() {
String s = null;
int len = s.length(); // causes NullPinterException
}
}
我的问题是:现在这个可怜的线程会发生什么?它的linux文件描述符是否被释放?在这种代码中是否存在任何稳定性或记忆问题?
答案 0 :(得分:5)
处理与任何其他终止线程没有区别。之前发生的一件事是根据规则(特定Thread
,ThreadGroup
,所有线程)搜索UncaughtExceptionHandler但除此之外,接下来是“正常”清理过程。与“正常”终止相比,当一个线程被未捕获的异常终止时,没有关于系统资源(取决于Thread
实现)或内存问题的具体后果。
答案 1 :(得分:0)
这根本不是关于线程的。看看你的代码:
String s = null;
int len = s.length();
当您致电s.length()
时,s
确实null
导致NullPointerException
。
将一些值分配给s
,您将得到它的长度。