과거에는 간단한 예시용 단순한 작업 큐(work queue)를 작성해도 많은 코드를 작성해야 했다. 안전 실패나 응답 불가가 될 여지를 없애는 코드를 추가해야 했기 때문이기도 한데, 다행히도 더 이상은 이런 코드를 작성하지 않아도 된다.
java.util.concurrent
패키지가 등장했다.
이 패키지의 실행자 프레임워크(Executor Framework)는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 그래서 예전의 방대한 코드보다 모든 면에서 뛰어난 작업 큐를 다음의 단 한 줄로 생성할 수 있게 되었다.
ExecutorService exec = Executors.newSingleThreadExecutor();
다음은 이 실행자에 실행할 태스크를 넘기는 방법이다.
exec.execute(runnable);
그리고 다음은 실행자를 우아하게 종료시키는 방법이다.(이 작업이 실패하면 VM 자체가 종료되지 않는다.)
exec.shutdown();
실행자 서비스의 기능은 이외에도 많다.
get()
)invokeAny()
) 혹은 모든 태스크(invokeAll()
)가 완료되기를 기다린다.awaitTermination()
)ExecutorcompletionServie()
)ScheduledThreadPoolExecutor()
)