В чем преимущество Java-5 ThreadPoolExecutor над Java-7 ForkJoinPool?

В Java 5 появилась поддержка асинхронного выполнения задач пулом потоков в форме среды Executor, сердцем которой является пул потоков, реализованный java.util.concurrent.ThreadPoolExecutor. В Java 7 добавлен альтернативный пул потоков в виде java.util.concurrent.ForkJoinPool.

Если посмотреть на соответствующий API, ForkJoinPool предоставляет расширенный набор функций ThreadPoolExecutor в стандартных сценариях (хотя, строго говоря, ThreadPoolExecutor предлагает больше возможностей для настройки, чем ForkJoinPool). Добавляя к этому наблюдение, что Задачи fork / join кажутся быстрее (возможно, из-за планировщика кражи работы), нужно определенно меньше потоков (из-за неблокирующей операции соединения), может создаться впечатление, что ThreadPoolExecutor был заменен ForkJoinPool.

Но так ли это на самом деле? Весь прочитанный мною материал, кажется, суммирует довольно расплывчатое различие между двумя типами пулов потоков:

  • ForkJoinPool предназначен для многих, зависимых, генерируемых задачами, коротких, почти никогда не блокирующих (т. Е.задачи с интенсивными вычислениями
  • ThreadPoolExecutor предназначен для нескольких независимых, генерируемых извне, длинных, иногда блокирующих задач

Правильно ли это различие вообще? Можем ли мы сказать что-нибудь более конкретное по этому поводу?

34
задан Ravindra babu 18 January 2016 в 13:23
поделиться