以下が正しい実装になるのだろうか
ExecutorService pool = Executors.newFixedThreadPool(MAX_NSH_THREADS);
Set<Future<Void>> futureRequest = new HashSet<Future<Void>>();
for (String host : SomeCollection)) {
Callable<Void> callable = new FileExtractor(j);
Future<Void> future = pool.submit(callable);
futureRequest.add(future);
}
for (Future<Void> future : futureRequest) {
try {
future.get();
} catch (Exception e) {
logger.error(e);
}
}
pool.shutdown();
Javadoc によると、future.get()
スレッドごとに実行が完了するのを待ちます。これは、(私が理解しているように) それぞれの将来について、結果を個別に受け取るのを待つことを意味します。その利益はどこから来るのですか、それとも私はそれを正しくしていませんか?