Thread Pools in Java
Executor Framework
Main Components
- ExecutorService
> Executor > ExecutorService - ThreadPoolExecutor
> Executor > ExecutorService > AbstraceExecutorService > ThreadPoolExecutor > execute() > submit() > invokeAny() > invokeAll() > shutdown() -- soft shutdown > shutdownNow() -- a waiting ExecutorSErvice will cause the JVM to kee running - ScheduledThreadPoolExecutor
> Executor > ExecutorService > AbstraceExecutorService > ThreadPoolExecutor > ScheduledThreadPoolExecutor > Executor > ExecutorService > ScheduledExecutorService > ScheduledThreadPoolExecutor
Fork/Join Pool Framework
This framework first ‘fork’ the given task, processing it, and then ‘join’.
Main Components
- ForkJoinPool
> Executor > ExecutorService > AbstraceExecutorService > ForkJoinPool - ForkJoinWorkerThread
> Thread > ForkJoinWorkerThreadEach of ForkJoinWorkerThread contains double-ended queue (deque), which stores forked tasks.
By using this deque and Work Stealing Algorithm, Fork/Join Pool framework allows one thread to work for multiple (especially recursive) tasks.
Spring
- ThreadPoolTaskExecutor ``` > Executor – java.util.concurrent > TaskExecutor – org.springframework.core.task > AsyncTaskExecutor > SchedulingTaskExecutor > ThreadPoolTaskExecutor
ThreadFactory – java.util.concurrent CustomizableThreadCreator – org.springframework.scheduling … > CustomizableThreadFactory > ExecutorConfigurationSupport > ThreadPoolTaskExecutor
Executor – java.util.concurrent > TaskExecutor – org.springframework.core.task > AsyncTaskExecutor > AsyncListenableTaskExecutor > ThreadPoolTaskExecutor ```