Я знаю что такое потоки. Я не понял что происходит в вашем примере. Зачем там countLimit? Что за класс Stream( это родной явовский класс из 8-й явы или ваше собственное изобретение)? В общем вообще ничего не понял. Чем вам не нравится например ExecutorService?
countLimit, как и countProcessors используются для демонстрации возможных ограничений при расчетах. Показал, что можно ввести «ключи». Вы можете оперировать и мощностями(процессорами) и ограничителями в виде констант.
Stream — придуманное название класса.
«C ExecutorService у нас была гарантия, что одна задача от начала и до конца выполняется одним потоком.
В Fork/Join работа с потоками претерпела сильные изменения. Задачи (ForkJoinTask’s) имеют уже другую семантику нежели потоки: один поток может выполнять несколько задач пересекающихся по времени.» из статьи http://habrahabr.ru/post/134183/. Посмотрите.
Оно выделяет свободный поток на задачу, которую успел ухватить из внутренней очереди (очень неточное определение на самом деле. Вообще, лучше почитать документацию и посмотреть пару лекций, скажем, Шипилева). Сама фраза «стартует новый процесс на каждый поток» звучит страшно.
Выполнение задач происходит из пула потоков ForkJoinPool.
Тут вы вольны поступать тремя способами. Задать его самостоятельно, поставить по умолчанию(будет зависеть о количества процессоров), и использовать общий пул.
Параллельное программирование в Java8. Создание многопоточных программ с помощью Fork/Join Framework