2011-06-11 3 views
2

스레드에서 run 메소드의 본문에서 예외가 발생했을 때이를 반영 (호출자)하는 방법과이를 처리하는 방법에 대해 논의하고 싶습니다.Java-Exception Handling

class MyThread extends Thread{ 
     public void run() throws IllegalInterruptedException{ 
       Thread.currentThread().sleep(1234); 
     } 
} 

다음 사람 (발신자)이이 예외를 관리합니다 :

여기 내 코드입니다.

답변

0

내가 잘 이해하면 다른 스레드에서 해고되는 예외를 처리 할 수 ​​있기를 원합니다. 샘플, setDefaultUncaughtExceptionHandler에 한 페이지를 살펴 보자 : 정상적이지가 발생했을 때

Java2S

+0

나는이 코드에 대해 : – Anuj

+0

ok, 내 대답은 –

0

예외가 프로그램에 의해 발생된다. 일반적인 튜토리얼을 사용할 수 here이지만, 요약 프로그램이 그것을 처리하기 위해 뭔가를 찾는 희망으로 예외를 throw 클래스 내에서 검색하는 것입니다 : 아마 : catch 문 :

catch (IllegalInterruptedException e) { 

//what you want the program to do if an IllegalInterruptedException 
//is thrown elsewhere and caught here. For example: 

System.err.println("program interrupted!" + e.getMessage()); 

} 

경우 프로그램 수 ' 문을 throw하는 클래스에서 catch 문을 찾으면 부모 클래스에서 처리 할 대상을 찾습니다. 예외가 throw 될 때 자식 클래스가 수행하는 작업이 무엇이든간에 예외를 throw 할 때 중지된다는 점에 유의하십시오. 이런 이유로 'try'블록에 예외를 던질 수있는 코드 블록을 묶고 'finally'문에서 실행하고자하는 코드를 따라야합니다.

위의 링크 된 튜토리얼은 정말 도움이됩니다.

+0

[this] (http://stackoverflow.com/questions/536811/doubt-in-exception-handling-and-finally-block-in -java)도 다른 곳에서 유용한 답입니다. – Charlie

+0

멀티 스레드 환경에서 어떤 예외가 발생하는지 (즉, 어떤 스레드가 예외를 얻고 어떻게 전파하는지) 질문에 실제로 답하지 않았습니다. 또한 예외는 상위 클래스에서 처리되지 않지만 호출 체인을 따라갑니다. –

0

main()과 같은 run()을 확인하고 답을 얻을 수 있습니다. 그러나 run()을 무시하고 new nonRuntime-Exceptions을 선언 할 수 있다고 생각하지 않습니다. 따라서 컴파일 오류가 발생합니다.
PS : 나는 어쩌면 당신은 말할 싶어, IllegalInterruptedException 찾을 수 InterruptedException

+0

예 확인되지 않은 예외는 절대적으로 옳지 만 예외는 아닙니다. – Anuj

+1

체크되지 않은 예외는 RuntimeException을 확장하는 예외입니다. Checked Exceptions를 nonRuntime-Exceptions로 언급했습니다. –

1

이 다른 경우가 있습니다 이미 쓰레드 그룹을 위해 설치 한 경우

  • JVM는, 예외 핸들러에 예외를 전달가.
  • 그렇지 않으면 JVM에서 처리합니다.

샘플 프로그램 :

public class ThreadGroupDemo extends ThreadGroup { 
    public ThreadGroupDemo() { 
     super("This is MyThreadGroupDemo"); 
    } 
    public void uncaughtException(Thread t, Throwable ex) { 
     // Handle your exception here .... 
    } 
} 

Thread t = new Thread(new ThreadGroupDemo(), "My Thread") { 
     // Some code here ...... 
}; 

t.start(); 

참고 : 체크 아웃 this link.

+0

thanx하지만 uncheckedException으로 사용할 수는 있습니다. – Anuj

0

또 다른 옵션 - 작업이 호출 가능하고 증명서를 제출하는 실행자를 사용합니다. 그러면 미래를 얻을 때 자동으로 포장 된 예외가 발생합니다.

관련 문제