본문으로 건너뛰기

스레드 풀 포화 정책 (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

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

Loading comments...