java.util.concurrent
java.util.concurrent 패키지는 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있습니다.
ExcutorService exec = Executors.newSingleThreadExcutor(); // 작업 큐 생성
exec.execute(runnable);
exec.shutdown();
실행자 서비스의 주요기능
- 특정 태스크가 완료되기를 기다립니다.
- 태스크 모음 중 아무것 하나(invokeAny 메서드) 혹은 모든 태스크(invokeAll 메서드)가 완료되기를 기다립니다.
- 실행자 서비스가 종료하기를 기다립니다.(awaitTermination 메서드)
- 완료된 태스크들의 결과를 차례로 받습니다.(ExecutorCompletionService 이용)
- 태스크를 특정 시간에 혹은 주기적으로 실행하게 합니다.(ScheduledThreadPoolExecutor 이용)
스레드 풀
스레드 풀의 스레드 개수는 고정할 수도 있고 필요에 따라 늘어나거나 줄어들게 설정할 수 있습니다. 우리가 필요한 실행자 대부분은 java.util.concurrent.Executors의 정적 팩토리들을 이용해 생성할 수 있습니다.
평범하지 않은 실행자를 원한다면 ThreadPoolExecutor 클래스를 직접 사용합니다. 이 클래스로는 스레드 풀 동작을 결정하는 거의 모든 속성을 제어할 수 있습니다.
포크-조인
자바7 부터 실행자 프레임워크는 포크-조인(fork-join) 태스크를 지원하도록 확장되었습니다. 포크-조인 태스크는 포크-조인 풀이라는 특별한 실행자 서비스가 실행합니다. ForkJoinTask의 인스턴스는 작은 하위 태스크로 나뉠 수 있고, ForkJoinPool을 구성하는 스레드들이 이 태스크를 처리하며, 일을 먼저 끝낸 스레드는 다른 스레드의 남은 태스크를 가져와 대신 처리할 수도 있습니다.
반응형