ThreadPool을 이용해서 Task를 실행하고 관리해줍니다.Spring 기본설정으로 되어 있는 TaskExecutor는 SimpleAsyncTaskExecutor입니다.SimpleAsyncTaskExecutor에서는 어떤 스레드도 재사용하지않고 호출마다 새로운 스레드를 시작합니다.이런 방식은 리소스 낭비가 심하니 아래와 같은 Thread Pool을 재정의해서 사용하는 방식이 바람직합니다.고정된 갯수를 가진 쓰레드풀입니다.Thread 갯수의 제한없이 무한정 생성하고, 해당 쓰레드의 작업이 60초간 없을 경우 Pool에서 제거하는 방식입니다.1분에 한 번씩 임무를 수행시키기 위한 쓰레드풀입니다.Fork)하고, 분할된 Task가 처리되면 그것을 합쳐(Join) 리턴해줍니다. 마치 분할정복 알고리즘처럼 동작합니다.
잡을 훔쳐다가 일을 합니다.모든 쓰레드가 골고루 가져가서 일하게 됩니다.하나의 쓰레드가 굉장히 오래 걸리고 나머지 쓰레드들의 작업은 빨리 끝나는 경우에 빛을 발하게 됩니다.쓰레드에게 분할되는 Job이 거의 동일한 일을 하게 된다면 ForkJoinPool은 오히려 독이 될 수 있습니다. 쓸데없는 객체 생성을 하게 되기 때문입니다.