자신이 개발하고 있는 어플리케이션을 완전히 제어하고픈 개발자(나를 포함한..)에게 Java에 매우 좋은 API를 제공합니다. 바로 Java 프로세스의 종료 시점을 어떠한 상황에서든 잡아 내 그 시점에서 원하는 코드를 실행하게 할 수 있는 방법인데요.. 아래의 간단한 코드를 살펴 보는 것으로 시작하겠습니다.
public class TestMain {
public static void main(String[] args) throws InterruptedException {
System.out.println("processing something in main(" +
Thread.currentThread().getName() + ") start...");
Runtime rt = Runtime.getRuntime();
rt.addShutdownHook(
new Thread() {
public void run() {
System.out.println("======================");
System.out.println("do arrange resource !!");
System.out.println("======================");
}
} );
System.out.println("Waiting while 10 seconds or hit ^C for exit.");
Thread.sleep(10000);
System.out.println("processing something in main end...");
System.exit(0);
System.out.println("this code never run!");
}
}
핵심은 바로 Runtime.getRuntime()으로 얻어진 Runtime 타입의 인스턴스입니다. 이 인스턴스에 addShutdownHook 매서드를 통해 자바 가상 머신이 종료하는 시점에서 실행하는 코드를 개발자가 유연하게(얼마까지 유연할지는 모르겠지만…) 붙일 수 있습니다. 자바 어플리케이션이 콘솔이여서 ^C를 눌러 강제로 종료시키든… 예외나 에러가 발생하든 Runtime의 addShutdownHook로 지정한 스레드의 실행(run) 로직은 반드시 실행된다는 점입니다.