자바 프로그램 종료시(JVM 종료시) 특정 작업 무조건 수행하기
2010-08-09 10:33:46

자바 어플리케이션을 수행하다가 프로그램을 종료할 때 특정 작업을 무조건 수행해야 할 경우가 있을 수 있다.

스윙 어플리케이션의 경우 사용자가 차림표에서 "종료"를 선택해서 종료한다면 끝내기 전에 자기가 원하는 작업을 할 수 있을지도 모른다. 하지만 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

▼ more
과제계획
2010-08-09 00:13:59

수시고사1 리팩토링 +wcf

수시고사2 5장 7장 8장 9.2 절 11장 구현

기말고사 ui ttf 와 연동

▼ more
할일을 많이 미뤄두었다
2010-08-08 05:29:12

허송세월을 한달을 꼬박하고..

여러모로 쉬었다

청소를하고 약속을잡고

미뤄둔일을 해야할 때다 독서도 유흥이 될까 두렵다

그뿐이다.

▼ more
진짜엔
2010-08-08 04:18:53

변하지 않는 것이 있다고 한다.

느껴지는 것 또한 다르다.

순수와 진짜 진심들

그래서 어렸을적 기억을 더 잘 기억하는건가.

뇌의 기억력 감퇴 따위가 아니라. 조금은 감성으로 채우는게 좋지

▼ more