PHpullh
학습 라이브러리/Java/ScheduledExecutorService

JAVA · 비동기/동시성

ScheduledExecutorService

주기적 작업과 지연 실행을 관리하는 스케줄러입니다.

비동기/동시성중급SchedulerscheduleAtFixedRate주기실행지연실행

핵심 설명

주기적 작업과 지연 실행을 관리하는 스케줄러입니다.

Java code

import java.util.concurrent.*;
import java.time.LocalTime;

public class SchedulerDemo {
    public static void main(String[] args) throws Exception {
        ScheduledExecutorService scheduler =
            Executors.newScheduledThreadPool(2);

        // 1. 지연 실행 (3초 후 1회)
        scheduler.schedule(
            () -> System.out.println(LocalTime.now() + " 지연 실행"),
            3, TimeUnit.SECONDS);

        // 2. 고정 주기 (시작 후 1초마다)
        // 이전 실행 시작 시간 기준
        ScheduledFuture<?> periodic = scheduler.scheduleAtFixedRate(
            () -> System.out.println(LocalTime.now() + " 주기 실행"),
            0, 1, TimeUnit.SECONDS);

        // 3. 고정 지연 (이전 실행 완료 후 1초 대기)
        ScheduledFuture<?> delayed = scheduler.scheduleWithFixedDelay(
            () -> {
                System.out.println(LocalTime.now() + " 지연 주기");
                try { Thread.sleep(500); } catch (InterruptedException e) {}
            },
            0, 1, TimeUnit.SECONDS);

        // 5초 후 중지
        Thread.sleep(5000);
        periodic.cancel(false);
        delayed.cancel(false);

        scheduler.shutdown();
        scheduler.awaitTermination(10, TimeUnit.SECONDS);
    }
}

학습 팁

scheduleAtFixedRate는 실행 간격 보장, scheduleWithFixedDelay는 완료 후 대기 시간 보장입니다. 작업 시간이 간격보다 길면 차이가 큽니다.

주의할 점

스케줄 작업에서 예외가 발생하면 해당 태스크가 조용히 중단됩니다. 반드시 try-catch로 감싸고 로깅하세요.

자주 묻는 질문

ScheduledExecutorService란 무엇인가요?

주기적 작업과 지연 실행을 관리하는 스케줄러입니다.

ScheduledExecutorService 학습 시 주의할 점은 무엇인가요?

스케줄 작업에서 예외가 발생하면 해당 태스크가 조용히 중단됩니다. 반드시 try-catch로 감싸고 로깅하세요.