ExecutorService가 분리하는 구성 요소

작업 표현과 worker 수명, 결과 대기를 서로 다른 API가 맡는다.

ExecutorService

Callable

값을 반환할 계산

task

Pool

bounded worker와 queue

resource

Future

완료·결과·실패 경계

join

Owner

생성·shutdown 정책

lifecycle

핵심: task 하나가 shared accumulator를 바꾸지 않고 local result를 반환하게 한다.