JAVA/Java Platform, Standard Edition
[공식 문서] 자바 Timer 클래스 완벽 가이드 : 백그라운드 작업 예약과 반복 실행
yebin0322
2025. 2. 10. 16:49
반응형
https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html
Timer(java.util.Timer)
- 백그라운드 스레드에서 특정 작업을 일정 시간 뒤 실행하거나, 주기적으로 반복 실행 할 수 있도록 도와주는 클래스
특징
- 백그라운드에서 실행됨
- 내부적으로 싱글스레드를 사용하여 작업을 실행 내부적으로 싱글스레드를 사용하여 작업을 실행
- Thread-safe 하여 여러 스레드에서 Timer 객체 공유 가능
- 한 번 실행 또는 반복 실행 가능
- schedule() : 일정 시간이 지난 후 한 번만 실행
- scheduleAtFixedRate() / schedule() : 일정 시간마다 반복 실행
메소드 | 실행방식 | 작업이 오래 걸릴 경우 | 실행 주기 |
---|---|---|---|
schedule() | Fixed-delay(고정 지연) | 다음 실행이 지연됨 | 이전 작업 종료 + 지정된 delay 후 실행 |
scheduleAtFixedRate() | Fixed-rate(고정 속도) | 일정한 주기를 유지하려고 함(Burst 가능) | 지정된 주기(period)마다 실행됨 |
- 타이머 스레드는 기본적으로 daemon(데몬)이 아님
- main스레드가 종료되어도 타이머 스레드가 실행 중이면 프로그램이 종료되지 않음
- isDaemon 옵션을 true로 설정하면 데몬 스레드로 실행 가능
- 작업이 너무 오래 걸리면 다른 작업이 지연될 수 있음
- Timer는 single-threaded(단일 스레드)이므로, 하나의 작업이 오래 걸리면 다음 작업이 지연됨
- Java 5 이후에는 ScheduledThreadPoolExecutor를 사용하는 것이 더 좋음
단점
- single thread로 동작 -> 하나의 작업이 오래 걸리면 다음 작업이 지연됨
- 작업이 예외(Exception)로 종료되면 타이머 스레드도 종료됨 -> 예외가 발생하면 타이머가 더 이상 동작하지 않음
메소드
메소드 | 설명 |
---|---|
schedule(TimerTask task, long delay) | delay 밀리초 후 한 번 실행 |
schedule(TimerTask task, long delay, long period) | delay 밀리초 후 실행, 이후 period 밀리초마다 반복 실행 |
scheduleAtFixedRate(TimerTask task, long delay, long period) | delay 밀리초 후 실행, 이후 period 밀리초 간격으로 반복 실행 |
cancel() | 타이머 종료(모든 예약된 작업 취소) |
purge() | 취소된 작업을 제거하여 메모리 확보 |
반응형