Tag Archives: ScheduledExecutorService

자바 타이머(java.util.Timer)를 잘 사용하는 방법

자바 타이머(java.util.Timer)를 잘 사용하는 방법에 대한 내용으로 http://tech.puredanger.com/2008/09/22/timer-rules/의 간략한 내용을 읽고, 나름의 해석을 해 봤다.

Two good rules of thumb for the use of Timer are:

1. Always start your Timer as a daemon thread. By default, new Timer() and other constructors use a non-daemon thread which means that the Timer will stick around forever and prevent shutdown. That may be what you expect, but I doubt it.
2. Always name your Timer. That name is attached to the Timer background thread. That way, if you do something dumb, and look at a thread dump, it will be exceedingly obvious when you’ve started 500 FooBarCleanupThreads.

이 내용은, “가급적 데몬 스레드로 타이머를 시작시키고, 타이머에 이름을 부여해서, 스레드 덤프등으로 디버깅 하는 상황에서 분명하게 드러나도록 하자”로 파악을 하였습니다.

그리고, 포스팅의 댓글에 타이머를 사용하지 말고, ScheduledExecutorService를 사용하는 것이 좋다고 하네요. 이유는 타이머가 가지는 원천적인 문제를 해결하기 위해서라고 하네요.

ScheduledExecutorService의 간단한 예제는 http://www.java2s.com/Code/Java/Threads/Java1550newfeatureThreadSchedule.htm 를 참고하세요.. ^^

자바 타이머(java.util.Timer)의 schedule vs scheduleAtFixedRate에 대한 내용도 참고해 보세요. ^^