PHpullh
학습 라이브러리/Java/ExecutorService 심화

JAVA · 비동기/동시성

ExecutorService 심화

스레드 풀을 관리하는 ExecutorService의 다양한 구현과 활용법입니다.

비동기/동시성중급ExecutorService스레드풀Futureshutdown

핵심 설명

스레드 풀을 관리하는 ExecutorService의 다양한 구현과 활용법입니다.

Java code

import java.util.concurrent.*;
import java.util.*;

public class ExecutorServiceAdvanced {
    public static void main(String[] args) throws Exception {
        // 고정 크기 스레드 풀
        ExecutorService fixed = Executors.newFixedThreadPool(4);

        // 캐시 스레드 풀 (필요 시 생성, 60초 유휴 시 제거)
        ExecutorService cached = Executors.newCachedThreadPool();

        // 단일 스레드 (순서 보장)
        ExecutorService single = Executors.newSingleThreadExecutor();

        // 태스크 제출
        List<Future<String>> futures = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            final int id = i;
            futures.add(fixed.submit(() -> {
                Thread.sleep(100);
                return "결과-" + id;
            }));
        }

        // 결과 수집
        for (Future<String> f : futures) {
            System.out.println(f.get(5, TimeUnit.SECONDS));
        }

        // invokeAll — 모두 완료될 때까지 대기
        List<Callable<String>> tasks = List.of(
            () -> "A", () -> "B", () -> "C");
        List<Future<String>> results = fixed.invokeAll(tasks);

        // 종료 (필수!)
        fixed.shutdown();
        if (!fixed.awaitTermination(10, TimeUnit.SECONDS)) {
            fixed.shutdownNow();
        }
        cached.shutdown();
        single.shutdown();
    }
}

학습 팁

try-with-resources(Java 19+ ExecutorServiceAutoCloseable)를 사용하면 자동으로 종료됩니다.

주의할 점

ExecutorServiceshutdown()하지 않으면 JVM이 종료되지 않습니다. finally 블록에서 반드시 종료하세요.

자주 묻는 질문

ExecutorService 심화란 무엇인가요?

스레드 풀을 관리하는 ExecutorService 의 다양한 구현과 활용법입니다.

ExecutorService 심화 학습 시 주의할 점은 무엇인가요?

ExecutorService 를 shutdown() 하지 않으면 JVM이 종료되지 않습니다. finally 블록에서 반드시 종료하세요.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.