linux中死java线程发生了什么?

时间:2012-11-14 12:05:51

标签: java linux multithreading exception stability

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

这根本不是关于线程的。看看你的代码:

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

当您致电s.length()时,s确实null导致NullPointerException。 将一些值分配给s,您将得到它的长度。