java.util.concurrent 패키지를 통해 인터페이스 기반의 유연한 태스크 실행기능을 사용할 수 있다.
작업 큐를 아래와 같이 생성할 수 있다.
ExecutorService exec = Executors.newSingleThreadExecutor();
이를 exec.execute(runnable);
과 같이 실행자에 실행할 태스트를 넘길 수 있다. 또한 exec.shutdown()
으로 종료시킬 수도 있다.
실행자 서비스의 주요 기능들을 살펴보자.
invokeAny
) 혹은 모든 태스크(invokeAll
)가 완료되기를 기다린다. awaitTermination
)ExecutorCompleteService
)ScheduledThreadPoolExecutor
)실행자 서비스를 사용하기에 까다로운 애플리케이션도 있다.
Executors.newCachedThreadPool
: 요청 받은 태스크들이 큐에 쌓이지 않고 즉시 스레드에 위임Executors.newFixedThreadPool
: 스레드 개수 고정ThreadPoolExecutor
: 완전 통제 가능작업 큐를 손수 만드는 일을 삼가고 스레드를 직접 다루는 것도 일반족으로 삼가자.
실행자 프레임 워크
이펙티브 자바 3/E