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)

  • 백그라운드 스레드에서 특정 작업을 일정 시간 뒤 실행하거나, 주기적으로 반복 실행 할 수 있도록 도와주는 클래스

특징

  1. 백그라운드에서 실행됨
  • 내부적으로 싱글스레드를 사용하여 작업을 실행 내부적으로 싱글스레드를 사용하여 작업을 실행
  • Thread-safe 하여 여러 스레드에서 Timer 객체 공유 가능
  1. 한 번 실행 또는 반복 실행 가능
  • schedule() : 일정 시간이 지난 후 한 번만 실행
  • scheduleAtFixedRate() / schedule() : 일정 시간마다 반복 실행
메소드 실행방식 작업이 오래 걸릴 경우 실행 주기
schedule() Fixed-delay(고정 지연) 다음 실행이 지연됨 이전 작업 종료 + 지정된 delay 후 실행
scheduleAtFixedRate() Fixed-rate(고정 속도) 일정한 주기를 유지하려고 함(Burst 가능) 지정된 주기(period)마다 실행됨
  1. 타이머 스레드는 기본적으로 daemon(데몬)이 아님
  • main스레드가 종료되어도 타이머 스레드가 실행 중이면 프로그램이 종료되지 않음
  • isDaemon 옵션을 true로 설정하면 데몬 스레드로 실행 가능
  1. 작업이 너무 오래 걸리면 다른 작업이 지연될 수 있음
  • 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() 취소된 작업을 제거하여 메모리 확보
반응형