자바 경험 치 드 롭:캡 처 되 지 않 은 이상 처리
우리 프로그램 에서 모든 이상 이 잡 히 는 것 은 아 닙 니 다.어떤 것 은 우리 가 잡 고 싶 지 않 기 때 문 입 니 다.왜냐하면 우 리 는 그 이상 을 잡 을 필요 가 없다 고 생각 하기 때 문 입 니 다.
어떤 것 은 우리 가 잡 을 수 없 는 것 이다.왜냐하면 우 리 는 그것들 이 어디 에 나타 날 지 확신 할 수 없 기 때문이다.예 를 들 어 NullPointer Exception,ClassCastException,Index OutOf Bounds Exception 등 Runtime Exception 이다.우 리 는 그들 이 발생 할 수 있 는 모든 곳 에서 그것들 을 잡 을 수 있 을 지 모 르 지만,이것 은 확실히 나 쁜 해결 방안 이다.그러나 어떤 경우 에 우 리 는 포획 되 지 않 은 이상 이 발생 할 때 자원 을 방출 하고 프로그램 을 잘못된 상태 에서 벗 어 나 게 하 는 등 일 을 해 야 한다.
여기 서 ThreadGroup 이 제공 하 는 방법 을 통 해 이 문 제 를 해결 하고 우리 의 프로그램 을 더욱 튼튼 하 게 만 들 었 습 니 다.ThreadGroup 은 uncaughtException 리 셋 방법 을 제공 합 니 다.스 레 드 그룹의 스 레 드 에 캡 처 되 지 않 은 이상 이 발생 하면 JVM 에서 이 방법 을 호출 합 니 다.
public class ApplicationLoader extends ThreadGroup {
private ApplicationLoader() {
super("ApplicationLoader");
}
public static void main(String args[])
{
Runnable addStarter
= new Runnable() {
public void run() {
//여기 서 우리 프로그램의 입구 함 수 를 호출 합 니 다.
//MyApplication.main(args);
}
};
//우리 자신의 프로그램 을 이 스 레 드 그룹의 스 레 드 로 실행 합 니 다.
new Thread(new ApplicationLoader(),
addStarter).start();
}
/*캡 처 되 지 않 은 이상 이 발생 하여 스 레 드 가 정지 되 었 을 때 이 방법 은 가상 컴퓨터 에 호출 됩 니 다.저 희 는 자신의 ThreadGroup 하위 클래스 에서 override 라 는 방법 만 있 으 면 그 중에서 이상 에 대해 해당 하 는 처 리 를 합 니 다*/
public void uncaughtException(Thread threadf, Throwable
e) {
//Handle the Exception
}
}