Spring
[Java] 멀티스레드 사용하기
두유_
2024. 6. 14. 13:29
Java Multi Thread
멀티 스레드 설정 파일
AsyncConfig.class
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean(name = "payworkExecutor")
public ThreadPoolTaskExecutor payworkExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setQueueCapacity(10);
executor.setThreadNamePrefix("payworkExecutor-");
executor.initialize();
return executor;
}
}
멀티 스레드 구현
Calc.class
@Qualifier("payworkExecutor")
private final ThreadPoolTaskExecutor payworkExecutor;
public void calculate(List<Dto> dtoList) {
for (Dto dto : dtoList) {
payworkExecutor.execute(() -> {
mapper.calc(dto);
throwIfCalculationFailed(dto);
});
}
}
JAVA 멀티 스레드 구현 - execute() 메서드와 submit() 메서드
execute() 메서드
- Execute() 메서드는 리턴값이 없는 Runnable 객체를 작업큐에 저장한다.
- 작업 처리 도중 예외가 발생하면 스레드가 종료되고 해당 스레드를 스레드 풀에서 제거한 뒤 다른 작업 처리를 위해 새로운 스레드를 생성한다.
submit() 메서드
- 작업 처리 도중 예외가 발생해도 스레드가 종료되지 않고 해당 스레드를 다음 작업을 위해 재사용한다.
- 스레드 생성으로 인한 오버 헤드를 줄일 수 있다.
Connection Pool 최대 갯수 설정
application.yml
hikari:
maximumPoolSize: 100
Reference
https://foot-develop.tistory.com/59
https://dev-coco.tistory.com/186