개발/Spring Boot
[Spring Boot] ThreadPoolTaskExecutor란
아현이라구
2023. 10. 24. 13:39
반응형
특정 스레드 개수 + 작업 큐 + 스레드 풀 개수 등 설정을 만들어 놓고 작업을 큐 방식으로 비동기 처리할 수 있는 Thread 라이브러리이다. 분업화로 인한 업무효율이 향상되는 장점이 있다.
@EnableAsync
@Configuration
public class TaskExecutorConfig {
private static int CORE_POOL_SIZE= 10;
private static int MAX_POOL_SIZE = 20;
private static int QUEUE_CAPACITY = 10;
private static String THREAD_NAME_PREFIX = "executor";
@Bean
public Executor executor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(CORE_POOL_SIZE);
executor.setMaxPoolSize(MAX_POOL_SIZE);
executor.setQueueCapacity(QUEUE_CAPACITY);
executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
return executor;
}
}
corePoolSize | 항상 살아있는 thread의 최소 개수입니다. |
maxPoolSize | 사용할 수 있는 최대 thread의 개수입니다. |
queueCapacity | 사용할 최대 queue의 크기입니다. |
Timeout
만약 모든 작업이 처리되길 기다리기 힘든 경우라면 최대 종료 대기 시간을 설정할 수 있다.
RejectedExecutionHandler 추가설정
- AbortPolicy
- 기본 설정
- Reject된 task가 RejectedExecutionException을 던진다.
- DiscardOldestPolicy
- 실행자를 종료하지 않는 한 가장 오래동안 처리되지 않은 요청을 삭제하고 execute()를 다시 시도한다.
- 오래된 작업을 skip 합니다.
- 모든 task가 무조건 처리되어야 할 필요가 없을 경우 사용합니다.
- DiscardPolicy
- Reject된 task는 버려진다. Exception도 발생하지 않는다.
- 처리하려는 작업을 skip 합니다.
- 역시 모든 task가 무조건 처리되어야 할 필요가 없을 경우 사용합니다.
- CallerRunsPolicy
- shutdown 상태가 아니라면 호출한 Thread에서 reject된 task를 대신 실행한다.
반응형