Вы все делаете правильно.
Допустим, что SomeCollection
содержит 100 элементов, что для запуска FileExtractor
требуется 5 секунд, а пул потоков ExecutorService
содержит 100 потоков.
Если вы начнете все так, как вы реализовали выше, ожидается, что код будет работать около 5 секунд, потому что FileExtractor
скорее всего будет связан с вводом / выводом.(при условии максимальной эффективности процессора).
Если вы не использовали Future
и все работало последовательно, вместо этого этот код работал бы около 500 секунд.
КлючFuture#get()
ждет, пока результат будет заполнен Thread
, начатым с отправки вашего Callable
в ExecutorService
, а не в ожидании метода ExecutorService#submit(Callable)
.