0

時間がかかりすぎる場合に結果またはタイムアウトを取得したい、長時間実行される操作があるとします。

比較したい 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

4

0 に答える 0