Thread Pool
개념 : Thread Pool은 미리 일정 개수의 스레드를 생성해두고, 작업이 들어오면 그 스레드들을 재사용하는 방식
왜 필요한가
스레드를 매번 새로 생성하면 비용이 크다
▪ 생성 비용 (매모리 + CPU)
▪ 컨텍스트 스위칭 비용
▪ 과도한 스레드 생성 시 서버 다운 위험
그래서 스레드를 미리 만들어 재사용합니다
동작 방식
1. 애플리케이션 시작 시 스레드 여러 개 생성
2. 작업이 들어오면 대기 큐에 저장
3. 빈 스레드가 작업을 가져가서 실행
4. 작업 완료 후 다시 대기 상태로 복귀
Java에서 Thread Pool 사용 예
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
System.out.println("비동기 작업 실행");
});
executor.shutdown();
주요 종류
▪ newFixedThreadPool(n) ➡ 고정 개수
▪ newCachedThreadPoll() ➡ 필요 시 생성/반환
▪ newSingleThreadExecutor() ➡ 단일 스레드
ThreadPoolExecutor 주요 설정
▪ corePoolSize ➡ 기본 스레드 수
▪ maxPoolSize ➡ 최대 스레드 수
▪ queueCapacity ➡ 대기 큐 크기
▪ keepAliveTime ➡ 유후 스레드 유지 시간
@Async란?
@Async는 Spring에서 비동기 메서드를 쉽게 만들기 위한 어노테이션입니다
Spring 내부적으로는 Thread Pool을 사용합니다
동작원리
▪ @Async가 붙은 메서드는
▪ 별도의 스레드에서 실행됩니다
▪ 호출한 스레드는 기다리지 않습니다 (non-blocking)
사용 방법 (Spring Boot)
@EnableAsync
@Configuration
public class AsyncConfig {
}
🔼 설정 활성화
@Service
public class MyService {
@Async
public void asyncMethod() {
System.out.println("비동기 실행");
}
}
🔼 메서드에 @Async 추가
반환 타입
| 반환 타입 | 설명 |
| void | 결과 안 받음 |
| Future | 결과 받기 |
| CompletableFuture | 가장 많이 사용 |
| ListenableFuture | Spring 전용 |
@Async
public CompletableFuture<String> asyncMethod() {
return CompletableFuture.completedFuture("완료");
}
🔼 예시
Thread Pool은 "스레드 재사용 메커니즘"이고,
@Async는 "Spring에서 Thread Pool을 쉽게 쓰게 해주는 기능"이다.
'🍏 개발일기' 카테고리의 다른 글
| 클래스(Class) 와 객체(Object) : 객체지향 프로그래밍(OOP)의 가장 기본 개념 (0) | 2026.03.10 |
|---|---|
| MVC 패턴이란 (0) | 2026.03.09 |
| 스마트스토어센터 Oracle에서 MySQL로의 무중단 전환기를 읽으며... (0) | 2026.02.17 |
| AWS 계정 삭제하는 방법 (0) | 2026.02.15 |
| 노랭이 96P 부터 시작 90번 ~ 100번 (0) | 2026.02.13 |