2013-11-23 3 views
1

나는 평행 질문이있다.java에서 ZOmbie 스레드 스택에 액세스하고 있습니까?

스레드 (A)가 실행중인 다음과 같은 방법을 가정 해 봅니다.

void run(){ 
//some work 
    FileInputStream fis=new FileInputStream(new File("/home/share/_config")); 
//some work with fis 
} 

및 가정 내가 자바 스레딩에서받은 있도록, 우리가 setUncaughtExceptionHandler() 방법으로 캐치되지 않는 예외 관리자를 추가 할 수 있습니다, 잡을 수없는 오류가있는, 그래서 질문은 내가 열 파일에 액세스 할 방법입니다 (fis) 죽은 스레드 스택에서 및 처리기에서 닫습니다?

+1

'finally' 문을 사용하여'FileInputStream'을 닫으면 아무런 문제가 없습니다. 또한 Java 7에서 'try' 절에서 괄호 안에 닫아야 할 사항을 지정할 수있는 새로운 구문이 있습니다. –

+0

'FileInputStream'은 확인 된 예외를 throw하는 것으로 선언됩니다. –

+0

코드가 잘 작성되어 있고 리소스를 멋지게 정리하거나 혼란스러워서 해결할 수 없습니다. 혼란이 가장 주변에 정돈 될 수 있다는 척하면서 나쁜 상황을 더욱 악화시키고 있습니다. –

답변

3

참고 : 코드는이 작업을 수행하지 마십시오 자바 7 +

에서 작동합니다! 일반적으로 스트림을 여는 메서드는 닫아야합니다. 시도 -과 - 자원 절에 스트림을 넣어, 그것은 자동으로 종료됩니다

void run() { 
    //some work 
    try (FileInputStream fis=new FileInputStream(new File("/home/share/_config"))) { 
     //some work with fis 
    } 
} 

fis이 종료됩니다 스트림, 실행 흐름이 try 블록을 떠나면 - 중이 끝난 때문에 직장이나 인해를 예외적으로

구분 기호로 세미콜론 (;)을 사용하여 동일한 try-with-resource 절에서 여러 입력 스트림을 열 수도 있습니다. 자세한 내용은 http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html을 참조하십시오.

+0

그래서 여러 리소스에 대해'try() {}'블록을 중첩 할 것입니다. 너무 효과가 있습니까?! 일반적으로이 예를 제외하고는 실제로 스택에 어떻게 액세스합니까? –

+0

아니요, 세미콜론 (;)으로 구분 된 try 절 내에 여러 리소스가있을 수 있습니다. – isnot2bad

+0

run 메서드 내에서 스트림을 열고 어딘가에 게시하지 않으면 외부에서 액세스 할 수 없습니다! (InputStream 변수의 범위는 메쏘드이기 때문에 기회는 없습니다!) – isnot2bad

관련 문제