Я только что нашел CompletionService в этом сообщении в блоге. Однако это действительно демонстрирует преимущества CompletionService над стандартным ExecutorService. Один и тот же код может быть написан с помощью. Итак, когда полезно использовать CompletionService?
Можете ли вы дать короткий образец кода, чтобы сделать его кристально чистым? Например, этот пример кода просто показывает, где не требуется CompletionService (= эквивалентно ExecutorService)
ExecutorService taskExecutor = Executors.newCachedThreadPool();
// CompletionService<Long> taskCompletionService =
// new ExecutorCompletionService<Long>(taskExecutor);
Callable<Long> callable = new Callable<Long>() {
@Override
public Long call() throws Exception {
return 1L;
}
};
Future<Long> future = // taskCompletionService.submit(callable);
taskExecutor.submit(callable);
while (!future.isDone()) {
// Do some work...
System.out.println("Working on something...");
}
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}