Вы смешиваете две вещи, которые не принадлежат друг другу.
- служба исполнителя и ее задачи: эта служба не знает или не заботится о том, сколько потоков будет для выполнения задач,Другими словами: просто отправьте свои рабочие элементы в него.
- , но вы должны "исправить" количество потоков заранее, и простое решение будет выглядеть так:
так:
int numThreads = (whateverStrTemp.equals(somethingElse)) ? 2 : 3;
ExecutorService executor = Executors.newFixedThreadPool(numThreads);
// now submit all the tasks you want to submit ...
Что касается комментария: это не легко возможно.Вызовы метода различаются в двух аспектах: вызываемый метод и передаваемый параметр!Вы можете поместить лямбды для различных вызовов в карту, но вам, вероятно, понадобится другая карта , которая содержит лямбду, которая выбирает параметр для передачи первой лямбде.С этой точки зрения, я не вижу разумного способа рефакторинга просто этого кода.
Я бы отступил назад и посмотрел на основную проблему, которую вы пытаетесь решить, и посмотрел быв способы конструирования этого по-другому, чтобы найти лучшее решение.
Помимо этого, вы можете поместить весь этот код в один цикл и добавить фьючерсы в List<Future<String>>
вместо создания переменных f1, f2, ... (подсказка: всякий раз, когда вы начинаете использовать такие имена, как foo1, foo2, ... вы должны немедленно остановиться и использовать массив или список).