ExecutorService 를 알아보기 전에 Executors를 알아볼 필요가 있다.
Executors 는 Executor, ExecutorService, ScheduledExecutorService, ThreadFactory, Callable 등 멀티 쓰레드를 기반으로 실행되는 인터페이스들의 팩터리 클래스이다.
특히 ThreadPoolExecutor 생성자를 통해서 ExecutorService 구현체를 제공해준다.
ExecutorService는 JAVA 에서 병렬 처리를 위해 제공되는 라이브러리이다.
ExecutorService 없이 병렬 처리를 구현하기 위해서는 Thread의 생성, 제거를 손수 진행해야 한다. 하지만, 이러한 일련의 과정을 ExecutorService 라는 클래스를 사용해서 쉽게 처리할 수 있다.
흔히 말하는 ThreadPool을 구현하기 매우 용이하기 때문에 ThreadPool을 생성해서 사용하고자 한다면 반드시 사용을 고려해볼 필요가 있다.
Runnable 이나 Callable 인터페이스를 구현한 Task의 실행과 종료를 수행한다. Queue로 관리되는 Task는 순차적으로 스레드에 할당된다.
CachedThreadPool FixedThredPoolSingleThraedExecutorrace condition 같은 부분들을 알아서 처리해준다ScheduledThreadPoolForkJoinPoolTask의 크기에 따라서 분할(Fork)하고, 분할된 Task가 처리되면 그것을 합쳐(Join) 리턴한다.ThreadPoolExecutor 사용ExecutorService executorService = new ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue);
ExecutorService executorService = new ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler);
ExecutorService executorService = new ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler);
Executors의 정적 팩터리 메서드 사용ExecutorService executorService = Executors.newCachedThreadPool();
ExecutorService executorService = Executors.newFixedThreadPool(int nThreads);
ExecutorService executorService = Executors.newSingleThreadExecutor();
execute()submit()Runnable이나 Callable 객체를 전달한다. Future 객체를 반환받기 때문에 제출한 Task의 진행 상태를 추적할 수 있다.Future의 future.get()이 null이면 정상 완료된 것이다.invokeAny()Callable들은 취소한다.invokeAll()List<Future<>> 형태로 반환한다.shutdown()shutdownNow()awaitTermination()