В Java 5 появилась поддержка асинхронного выполнения задач пулом потоков в форме среды Executor, сердцем которой является пул потоков, реализованный java.util.concurrent.ThreadPoolExecutor. В Java 7 добавлен альтернативный пул потоков в виде java.util.concurrent.ForkJoinPool.
Если посмотреть на соответствующий API, ForkJoinPool предоставляет расширенный набор функций ThreadPoolExecutor в стандартных сценариях (хотя, строго говоря, ThreadPoolExecutor предлагает больше возможностей для настройки, чем ForkJoinPool). Добавляя к этому наблюдение, что Задачи fork / join кажутся быстрее (возможно, из-за планировщика кражи работы), нужно определенно меньше потоков (из-за неблокирующей операции соединения), может создаться впечатление, что ThreadPoolExecutor был заменен ForkJoinPool.
Но так ли это на самом деле? Весь прочитанный мною материал, кажется, суммирует довольно расплывчатое различие между двумя типами пулов потоков:
Правильно ли это различие вообще? Можем ли мы сказать что-нибудь более конкретное по этому поводу?