java - ExecutorService

잠자는 고양이·2025년 5월 22일
0

Java

목록 보기
65/73

🧵 ExecutorService란?

  • ExecutorService는 Java에서 스레드를 직접 생성하고 관리하는 번거로움 없이, 효율적으로 스레드를 실행할 수 있도록 해주는 인터페이스입니다.
  • 개발자가 직접 Thread를 만들지 않고도 멀티스레딩 작업을 수행할 수 있습니다.

✅ 특징

  • 스레드 풀(Thread Pool) 을 사용하여 스레드를 재사용함
  • 스레드 생성, 실행, 종료 생명 주기를 자동으로 관리
  • 비동기 작업 처리가 용이함

⚠️ new Thread()와의 차이점

구분new Thread()ExecutorService
생성매번 새 스레드 생성스레드 풀에서 스레드 재사용
관리직접 해야 함자동 관리
성능비용 높음효율적

🛠️ 주요 메소드

  • execute(Runnable command) : Runnable 작업 실행 (결과 반환 없음)
  • submit(Runnable task) : Runnable 작업 실행 후 Future<?> 반환
  • submit(Callable<T> task) : Callable 작업 실행 후 Future<T> 반환
  • shutdown() : 더 이상 새로운 작업은 받지 않고, 기존 작업이 끝나면 종료
  • shutdownNow() : 즉시 작업 종료 시도

💡 Thread Pool이란?

  • 미리 정해진 일정 개수의 스레드를 생성해 두고, 필요할 때 스레드를 재사용하는 구조
  • 불필요한 스레드 생성 방지로 성능 향상
  • DB 커넥션 풀과 비슷한 개념

⚙️ Thread Pool 동작 원리

  1. 미리 스레드를 일정 개수 생성 (newFixedThreadPool(5) 등)
  2. 작업 요청이 들어오면 대기 중인 스레드가 실행
  3. 작업이 끝난 스레드는 다시 풀로 복귀
  4. 스레드가 부족하면 큐에 대기
  5. shutdown() 호출 시 새 작업은 거부, 기존 작업만 마무리

✅ Thread Pool 사용하는 이유

  • 반복적인 스레드 생성/소멸 비용 감소
  • 메모리·CPU 낭비 방지
  • 과도한 스레드 사용 방지 → 성능 최적화

❌ Thread Pool 없이 처리 시 문제점

  • 요청마다 새로운 스레드 생성 → 과부하, 성능 저하

🔎 ExecutorService의 주요 스레드 풀 종류

1. newFixedThreadPool(int nThreads)

  • 고정된 개수의 스레드 유지
  • 초과된 작업은 큐에 저장
  • 작업량이 일정하고 제한된 스레드로 처리할 때 적합

2. newCachedThreadPool()

  • 필요 시 스레드를 동적으로 생성, 유휴 스레드 재사용
  • 순간적인 요청 처리에 적합
  • 스레드 수 제한 없음 → 과부하 가능성 있음

3. newSingleThreadExecutor()

  • 단일 스레드로 작업 순차 실행
  • 순서 보장 및 데이터 무결성이 중요한 작업에 적합

4. newScheduledThreadPool(int corePoolSize)

  • 주기적인 작업 실행 가능
  • 타이머, 스케줄링 작업에 사용

profile
개발자가 되고 싶은 잠자는고양이

0개의 댓글