java.util.concurrent 패키지의 핵심 인터페이스.

💡 현재는 더 확장된 인터페이스인 ExecutorService를 주로 사용한다.

계층 구조

Executor (interface)
    │
    └─ ExecutorService (interface)
            │
            ├─ ThreadPoolExecutor (class)
            ├─ ScheduledThreadPoolExecutor (class)
            └─ ForkJoinPool (class)

Executors

[Java] 동반클래스(Companion class)란?

인터페이스가 스태틱 메서드를 가질 수 없던 시절 자주 사용하던 자바의 패턴인 동반클래스.

Executor의 동반 클래스는 Executors임. Executor의 스태틱 팩토리 메서드 역할을 한다.

public class Executors {
    // ExecutorService(Executor의 확장) 생성 메서드들
    public static ExecutorService newFixedThreadPool(int nThreads) { ... }
    public static ExecutorService newCachedThreadPool() { ... }
    public static ExecutorService newSingleThreadExecutor() { ... }
    public static ExecutorService newVirtualThreadPerTaskExecutor() { ... }
    
    // 기타 유틸리티 메서드들
    public static Callable<Object> callable(Runnable task) { ... }
    // ...
}

그냥 `Executor` 는 쓰레드에 작업을 제출하면 해당 작업을 통제할 수가 없다. 이걸 통제하려면 `ExecutorService` + `Future` 의 조합이 필요함.