Java –разработчика хлебом не корми дай написать многопоточное приложение. И он пишет в ожидании увеличения производительности приложения. Написав приложение, запустив множество потоков ExecutorService (ForkJoinPool настоящий разработчик не использует по двум причинам: FJP создан какими то людьми из Oracle и вторая причина FJP оттюнингован и работает великолепно), разработчик с удовольствием смотрит на свой многостраничный, плохо документированный, труднопонимаемый код в котором различные потоки делают тривиальные задачи. Вроде быстро. И получается странная картина: с одной стороны кастомное решение управления многопоточным пулом, с другой стороны использование встроенного механизма управления многопоточностью, такое как FJP. В этом случае приложение живет и пожирает ресурсы сразу несколько механизмов многопоточности. И это многоресурсов. Дальше хуже. Мы же знаем, что синхронизированные коллекции не всегда гарантируют корректную работу в многопоточном режиме. И мы как разработчики вы