時間がかかりすぎる場合に結果またはタイムアウトを取得したい、長時間実行される操作があるとします。
比較したい 2 つの異なるバージョンがあります。
1) 呼び出すpoll
と、アイテムが内部ブロッキング キューに入れられたかどうかを確認します。
ExecutorService executorService = Executors.newFixedThreadPool(4);
CompletionService<String> completionService = new ExecutorCompletionService<>(executorService);
Future<String> future = completionService.submit(() -> {...});
final Future<String> result = completionService.poll(30, TimeUnit.SECONDS);
if (result != null) {
...
}
2)呼び出すと、待機get
する実装がありますFutureTask
ExecutorService executorService = Executors.newFixedThreadPool(4);
Future<String> future = executorService.submit(() -> {...});
try {
String result = future.get(30, TimeUnit.SECONDS);
} catch (TimeoutException e) {
...
}
基本的に両方のバージョンで、future が実行を完了するのを待っていますが、内部実装は異なります。性能面で何か違いはありますか?https://stackoverflow.com/a/52980559/2055854CompletionService
と比較しCompletableFuture
て、あるべきだと言っているこの回答を見てきました。実装も同じでしょうか。はいの場合、その理由をより詳しく説明していただければ幸いです。FutureTask