java.util.Timer를 Logging 라이브러리에서 사용을 하다보니, Logging라이브러리를 사용하고 있는 로깅서버에서 addShutdownHook() 메쏘드를 통해서 등록된 쓰레드가 실행이 안 된다.. ^^;;
Java API 문서를 보면, 아래와 같은 내용이 있습니다.
그래서, Timer() 대신 daemon으로 Timer객체를 생성하면, addShutdownHook() 메쏘드에 등록된 쓰레드의 run() 메쏘드가 잘 동작하더군요.. ^^;;
새로운 타이머를 작성합니다.
demon로서 실행되도록 지정할 수 있는 관련 thread를 가지는 새로운 타이머가 작성됩니다.
Java API 문서를 보면, 아래와 같은 내용이 있습니다.
Timer 객체의 마지막 라이브 참조가 종료해, 미처리의 태스크가 모두 실행되면, 타이머의 태스크 실행 thread도 동시에 완료해, 가비지 컬렉트됩니다. 다만, 이것에는 한없고 긴 시간이 걸리는 경우가 있습니다. 디폴트에서는 태스크의 실행 thread는 「demon thread」로서는 실행되지 않기 때문에 어플리케이션이 종료하지 않게 할 수 있습니다. 타이머의 태스크 실행 thread를 즉시 완료시키는 경우, 호출측은 타이머의 cancel 메서드를 호출할 필요가 있습니다.흠... 그렇군요.. 종료가 안되더군요... ^^;;
그래서, Timer() 대신 daemon으로 Timer객체를 생성하면, addShutdownHook() 메쏘드에 등록된 쓰레드의 run() 메쏘드가 잘 동작하더군요.. ^^;;
Timer ()
새로운 타이머를 작성합니다.
Timer
(boolean isDaemon) demon로서 실행되도록 지정할 수 있는 관련 thread를 가지는 새로운 타이머가 작성됩니다.
'Java' 카테고리의 다른 글
| Java vs C# Serialize 비교 또는 C# DataSet을 쓰지 말아야 되는 이유(?) (4) | 2010/01/15 |
|---|---|
| Exception StackTrace to a String (0) | 2009/11/24 |
| addShutdownHook() problem with java.util.Timer instance (0) | 2009/11/24 |
| GMail을 통해서 메일보내기.. (0) | 2009/10/19 |
| java synchronized keyword는 객체에 대한 lock 이죠?? (0) | 2009/10/19 |