Spring
Spring - ThreadPoolExecutor reject policy 설정
codeManager
2022. 5. 30. 18:38
반응형
자바 Thread Pool은 작업 처리에 사용되는 Thread를 제한된 개수만큼 정해놓고 작업 큐에 들어오는 작업을 하나씩 Thread가 맡아서 처리한다.
쓰레드가 바빠서 queue가 full인 경우 어떻게 처리할지에 대해서 설정을 할 수 있다.
ThreadPoolExecutor 클래스를 보면 RejectedExecutionHandler를 설정하면 queue가 full인 경우 정책을 설정할 수 있다.
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler
)
AbortPolicy
- 기본 설정값
- Reject 발생 시 RejectedExecutionException 발생
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
CallerRunsPolicy
- Reject된 task를 실행중인 main thread에서 동작한다
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
DiscardPolicy
- Reject된 task는 버려진다.
- Exception도 발생하지 않음
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
DiscardOldestPolicy
- 가장 오래된 처리되지 않은 요청을 삭제하고 다시 시도한다.
- DiscardPolicy와 마찬가지로 데이터가 유실될 수 있다.
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
출처
반응형