자신이 개발하고 있는 어플리케이션을 완전히 제어하고픈 개발자(나를 포함한..)에게 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) 로직은 반드시 실행된다는 점입니다.





9월말에 번역 끝내고 출판사에 보냈더랬습니다. 대략 1달정도 교정되어 인쇄된 교정지를 받아보고 참으로 감동스러웠더랬는데… 다시 교정하시는 분이 지적한 부분을 보완해서 보내고.. 다시 2주 정도 기다린 지금.. 역자 서문을 요청 받아 그것까지 보냈습니다. 아마 11월 말쯤 출판이 된다고 하니.. 실제로 출판된 책을 보면 또 어떤 기분일지 궁금합니다..