-
Spring - ThreadPoolExecutor reject policy 설정Spring 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());
출처
반응형'Spring' 카테고리의 다른 글
[Request processing failed; nested exception is java.lang.NullPointerException] with root cause (0) 2022.05.30 Request header is too large 해결방법 (0) 2022.05.30 Spring - JPA 에러 Unable to locate Attribute with the the given name on this ManagedType (0) 2022.05.26 Spring - modelMapper list 매핑하기 (0) 2022.05.12 Spring - Bean Thread safe (0) 2022.05.03