자바 어플리케이션을 수행하다가 프로그램을 종료할 때 특정 작업을 무조건 수행해야 할 경우가 있을 수 있다.
스윙 어플리케이션의 경우 사용자가 차림표에서 "종료"를 선택해서 종료한다면 끝내기 전에 자기가 원하는 작업을 할 수 있을지도 모른다. 하지만 Ctrl-C 로 종료하거나 아니면 웹 어플리케이션 처럼 언제 어떻게 종료할 지 알 수 없는 상황에서도 뭔가를 꼭 해야만 하는 경우가 있을 수도 있다.
그럴 때 Runtime.getRuntime().addShutdownHook(Thread t)를 이용하면 된다.
JVM이 종료할 때 쓰레드 객체의 run() 메소드가 무조건 실행된다.
단, kill -9로 프로세스를 죽였을 때는 예외이다.
일반 어플리케이션에서 예제
아래는 익명 클래스를 이용한 예제이다.
프로그램을 실행한 다음 엔터키를 누르거나 Ctrl-C 키로 강제 종료해도 "JVM은 종료중..." 이라는 메시지는 출력된다.
kill -9 pid 로 하면 메시지가 출력되지 않고 그냥 종료되어 버리는 것을 볼 수 있다.
public class Test {
public static void main(String args[]) {
// JVM이 종료할 때 특정 작업 무조건 수행하기.
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("JVM은 종료중...");
}
});
System.out.println("엔터를 치면 프로그램이 종료됩니다.");
try {
System.in.read();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
웹 어플리케이션에서는??
웹 어플리케이션에서는 시작 서블릿의 init() 메소드에서 위와 같이 구현하면 WAS가 종료될 때 지정한 작업이 수행된다
by 권남 2004/08/19 21:53 kwon37xi.egloos.com/2176460 덧글수 : 0