스레드 풀 포화 정책

스레드 풀과 작업 대기열이 가득 찬 포화 상태에서 새로운 작업 요청을 어떻게 처리할지 결정하는 정책이다.

포화 상태란

Java의 ThreadPoolExecutor는 상시 유지하는 스레드 수인 corePoolSize, 작업 대기열 크기인 workQueue, 추가로 늘릴 수 있는 최대 스레드 수인 maxPoolSize를 설정값으로 갖는다. 스레드가 maxPoolSize까지 늘어나고 대기열까지 꽉 찬 상태를 포화 상태라고 하며, 이때 새 작업이 들어오면 RejectedExecutionHandler의 구현체인 포화 정책이 실행된다.

포화 정책의 종류

RejectedExecutionHandler의 기본 구현체는 4가지다.

커스텀 정책

RejectedExecutionHandler 인터페이스를 직접 구현하면 원하는 포화 정책을 만들 수 있다.

class CustomPolicy implements RejectedExecutionHandler {

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        // ...
    }
}

@Async에서 커스텀 스레드 풀을 설정할 때도 setRejectedExecutionHandler()로 포화 정책을 지정할 수 있다.

핵심 정리

스레드 풀 포화 정책은 스레드와 대기열이 모두 가득 찬 상황에서 시스템을 어떻게 보호할지 결정하는 전략이며, 서비스 특성에 맞춰 기본 정책 중 하나를 고르거나 직접 구현해 사용할 수 있다.

→ 스레드 풀 포화 정책이란 무엇인가요?

CSLOG에서 보기