2

我的项目中有一个 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 文件描述符是否被释放?此类代码中是否存在任何稳定性或内存问题?

4

2 回答 2

5

处理与任何其他终止的线程没有什么不同。之前发生的一件事是根据规则(特定的、所有线程)搜索UncaughtExceptionHandler,但除此之外,“正常”清理过程如下。与“正常”终止相比,当线程被未捕获的异常终止时,没有关于系统资源(取决于实现)或内存问题的特定后果。ThreadThreadGroupThread

于 2012-11-14T12:17:08.777 回答
0

这根本与线程无关。看看你的代码:

   String s = null;
   int len = s.length();

当您调用时s.length()s确实null会导致NullPointerException. 分配一些值s,你会得到它的长度。

于 2012-11-14T12:08:56.660 回答