본문으로 건너뛰기
목록으로

스레드 풀 포화 정책 (Saturation Policies)

자바의 ThreadPoolExecutor를 기준으로 설명하겠습니다. 스레드 풀 포화 정책(Saturation Policies) 이란, 말 그대로 스레드 풀이 포화 상태인 경우의 행동을 결정하는 정책을 의미합니다. ThreadPoolExecutor 설정에는 상시 유지하는 스레드의 수인 corePoolSize, 작업 대기열 크기인 workQueueSize, 스레드를 추가할 수 있는 최대 수인 maxPoolSize가 존재하는데요. 스레드가 maxPoolSize까지 늘어나고 대기열까지 꽉 찬 상태를 포화 상태라고 합니다. 이때 새로운 작업 요청이 들어오면, RejectedExecutionHandler의 구현체인 포화 정책이 실행됩니다.

✔️ 포화 정책의 종류​

포화 정책 종류는 RejectedExecutionHandler의 구현체를 기준으로 AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy, DiscardPolicy가 존재합니다.

기본적으로 제공되는 포화 정책은 4가지지만, 직접 RejectedExecutionHandler 인터페이스를 구현하여 커스텀 포화 정책을 만들 수 있습니다.

class CustomPolicy implements RejectedExecutionHandler {

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

AbortPolicy​

포화 상태일 경우, RejectedExecutionException을 발생시킵니다.

DiscardPolicy​

포화 상태일 경우, 신규 요청을 무시합니다.

DiscardOldestPolicy​

포화 상태일 경우, 작업 대기열에서 가장 오래된 요청을 버리고 신규 요청을 대기열에 추가합니다.

CallerRunsPolicy​

포화 상태일 경우, 요청 스레드에서 해당 작업을 실행합니다.