2012-11-14 2 views
2

내 프로젝트에서 NullPointerException이 발생했으며이 문제점의 심각도를 평가하고 싶습니다. 스레드는 스레드가 작업을 끝내고 어쨌든 죽기 직전에 throw됩니다. 내 코드가이 예외를 catch하지 못했습니다. 따라서 스레드가 종료되었습니다.리눅스에서 죽은 java 스레드는 어떻게 되었습니까?

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 
    } 
} 

내 질문은 : 지금이 가난한 스레드에 일어난 것입니다 무엇

여기 상황의 간단한 시뮬레이션은? 리눅스 파일 디스크립터가 해제 되었습니까? 이러한 종류의 코드에서 발생할 수있는 안정성 또는 메모리 문제가 있습니까?

+0

(참고 : "시스템"이 계속 실행되어야한다는 사실을 강조하기 위해 편집 됨) – nahsh

+0

스레드에 파일 설명자가 없습니다. –

답변

5

처리는 다른 종료 된 스레드와 다르지 않습니다. 이전에 발생했던 한 가지는 규칙 (특정 Thread, ThreadGroup, 모든 스레드)에 따라 UncaughtExceptionHandler을 검색하는 것이지만 "표준"정리 절차는 다음과 같습니다. "정상"종료와 달리 캡처되지 않은 예외로 스레드가 종료 될 때 시스템 리소스 (Thread 구현에 따라 다름) 또는 메모리 문제와 관련하여 특별한 결과가 없습니다.

+0

감사합니다. 그것은 매우 도움이되었습니다. – nahsh

0

이것은 스레드에 관한 것이 아닙니다. 당신의 코드를보고 :

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

당신이 s.length()s를 호출 실제로 NullPointerException 원인 null입니다. s에 약간의 값을 지정하면 길이가 표시됩니다.

+5

이것은 그의 질문입니다. 예외가 발생한 후에 스레드에서 어떤 일이 발생합니까? – exagi

관련 문제