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