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());

 

 

출처

https://www.baeldung.com/java-rejectedexecutionhandler

반응형