addShutdownHook() problem with java.util.Timer instance

java.util.Timer를 Logging 라이브러리에서 사용을 하고 있고, Logging라이브러리를 사용하고 있는 로깅서버에서 addShutdownHook() 메서드를 사용해서 등록한 쓰레드가 실행이 안 된다.. ^^;;

Java API 문서를 보면, 아래와 같은 내용이 있다.

Timer 객체의 마지막 라이브 참조가 종료해, 미 처리의 태스크가 모두 실행되면, 타이머의 태스크 실행 thread도 동시에 완료해, 가비지 컬렉트됩니다. 다만, 이것에는 한없고 긴 시간이 걸리는 경우가 있습니다. 디폴트에서는 태스크의 실행 thread는 「demon thread」로서는 실행되지 않기 때문에 어플리케이션이 종료하지 않게 할 수 있습니다. 타이머의 태스크 실행 thread를 즉시 완료시키는 경우, 호출측은 타이머의 cancel 메서드를 호출할 필요가 있습니다.

흠, 그렇다, 종료가 안된다..^^;;
그래서, Timer() 대신 daemon으로 Timer객체를 생성하면, addShutdownHook() 메쏘드에 등록된 쓰레드의 run() 메쏘드가 잘 동작한다. ^^;;

Timer()

새로운 타이머를 작성한다.

Timer(boolean isDaemon)
demon로서 실행되도록 지정할 수 있는 관련 thread를 가지는 새로운 타이머가 작성됩니다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.