Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) Executor와 ExecutorService의 차이점 완벽 정리

Executor 프레임워크란?

Executor와 ExecutorService는 모두 자바 5(Java 5)에서 함께 도입된 Executor 프레임워크에 포함된 인터페이스입니다.

자바에서 스레드를 직접 생성하는 것은 매우 비용이 많이 드는 작업입니다. 따라서 매번 새로운 스레드를 시작하기보다는 이미 존재하는 스레드를 재사용하는 것이 바람직하며, 이를 Executor 프레임워크를 활용하면 손쉽게 구현할 수 있습니다.

Executor 프레임워크는 스레드 풀(thread pool)을 사용하여 작업을 병렬로 실행함으로써 응답 시간과 리소스 활용도를 최적화합니다. 기본으로 제공되는 내장 스레드 풀은 다음 네 가지 유형입니다.

  • Fixed Thread Pool – 고정된 개수의 스레드를 유지하며 작업을 처리하는 풀
  • Cached Thread Pool – 필요할 때 스레드를 새로 만들고, 일정 시간 사용하지 않으면 회수하는 유연한 풀
  • Scheduled Thread Pool – 작업을 지정한 시간에 또는 주기적으로 실행하도록 예약하는 풀
  • Single Thread Executor – 단일 스레드로 작업을 순차적으로 실행하는 실행기

Executor와 ExecutorService의 주요 차이점

번호구분ExecutorExecutorService
1기본 관계부모(parent) 인터페이스입니다.Executor 인터페이스를 확장(extends)합니다.
2핵심 메서드execute() 메서드를 제공합니다.submit() 메서드를 제공합니다.
3반환 타입아무것도 반환하지 않습니다(void).Future 객체를 반환합니다.
4Runnable / CallableRunnable 객체만 허용합니다.Runnable과 Callable을 모두 허용합니다.

정리하면, Executor는 단순히 전달받은 작업(Runnable)을 실행하는 최소한의 역할만 수행하는 반면, ExecutorService는 Future를 통한 실행 결과 확인, Callable 지원, 작업 종료 및 생명주기 관리(shutdown) 등 더욱 풍부한 기능을 제공합니다.

ExecutorService 사용 예제

public class Main {
    public static void main(String args[]) {
        ExecutorService services = Executors.newSingleThreadExecutor();
        Future<?> future = services.submit(new Task());
    }
}
public class Task implements Runnable {
    @Override
    public void run() {
        System.out.println("In Run");
    }
}

위 예제에서 submit()Future 객체를 반환합니다. 이 객체를 활용하면 future.get()을 호출해 작업의 결과를 가져오거나, 작업의 완료 여부와 진행 상태를 추적할 수 있습니다.

Executor 사용 예제

public class Main {
    public static void main(String args[]) {
        Executor executor = Executors.newSingleThreadExecutor();
        executor.execute(new Task());
    }
}
public class Task implements Runnable {
    @Override
    public void run() {
        System.out.println("In Run");
    }
}

반면 execute()는 반환값이 없으므로 작업을 실행하기만 할 뿐, 그 결과나 완료 상태를 확인할 방법이 없습니다. 따라서 작업 결과가 필요 없는 간단한 비동기 처리에는 Executor를, 결과 조회나 세밀한 작업 관리가 필요한 경우에는 ExecutorService를 사용하는 것이 적합합니다.