Я новичок в ExecutorService, но не уверен в своем подходе к этому.
Я мог иметь дело до 100 потоков для известной задачи.
Я использую общий формат ниже, где я создаю Список FutureTasks, а затем отправляю их в ExecutorService.
ExecutorService возвращает и добавляет эти ожидающие результаты в другой список.
Затем я перебираю этот список, вызывая get () для каждого ожидающего результата.
Мой запрос таков: не будет ли этот блок в каждом get () по очереди, пока не завершатся все 100 потоков? Есть лучший способ сделать это ?
И прав ли я, предполагая, что get () возвращает результат метода call () реализации Callable? Я использую класс FutureTask по умолчанию и не разделил его на подклассы.
ExecutorService exec = Executors.newFixedThreadPool( NUM_THREADS );
List<JobClass> originalList = new ArrayList<JobClass>();
List<SomeOtherClass> pendingResult = new ArrayList<SomeOtherClass>();
List<Future<SomeOtherClass>> resultList = new ArrayList<Future<SomeOtherClass>>();
for( JobClass sc : originalList )
pendingResult.add( submit( sc );
for( Future<SomeOtherClass> future : futures )
resultList.add( future.get(5, TimeUnit.SECONDS) );