개발/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를 대신 실행한다.  

 

 

반응형