포크 조인 프레임워크는 병렬화할 수 있는 작업을 재귀적으로 작은 작업으로 분할한 다음에 서브태스크 각각의 결과를 합쳐서 전체 결과를 만들도록 설계되었다. 포크/조인 프레임워크에서는 서브태스크를 스레드 풀(ForkJoinPool)의 작업자 스레드에 분산 할당하는 ExecutorService 인터페이스를 구현한다.
스레드 풀을 이용하려면 RecursiveTask<R>
의 서브클래스를 만들어야 한다. RecursiveTask를 정의하려면 추상 메서드 compute를 구현해야 한다.
protected abstract R compute();
- compute 메서드 의사코드
if(태스크가 충분히 작거나 더 이상 분할 할 수 없으면) {
순차적으로 태스크 계산
} else {
태스크를 두 서브태스크로 분할
태스크가 다시 서브태스크로 분할되도록 이 메서드를 재귀적으로 호출함
모든 서브태스크의 연산이 완료될 ㄸ까지 기다림
각 서브태스크의 결과를 합침
}
- 각각이 서브태스크의 크기가 충분히 작아질 때까지 태스크를 재귀적으로 포크함
- 모든 서브태스크를 병렬로 수행
- 부분 결과를 조합