web-dev-qa-db-ja.com

Java --Future.get()複数の呼び出し

タスクの完了後にJavaが複数回呼び出された場合、JavaのFuture.get()はどのように動作しますか?同じ結果が返されますか?または、計算が失敗した場合、同じ例外を除いてExecutionExceptionを何度もスローしますか?私はそれについてのドキュメントで何も見つけることができません!

23
Marco Servetto

Futureget()を何度でも呼び出すことができ、結果を生成するタスクがまだ終了していない場合にのみブロックされます。

タスクがすでに終了している場合は、タスクの結果がすぐに返されます。

タスクが例外で失敗した場合、get()を呼び出すと、呼び出すたびにExecutionExceptionがスローされます。

32
Jesper

私はそれについてのドキュメントで何も見つけることができません!

あなたはそれらを読んだことがありますか?私がそれらを読んだときに私は答えを得たので、ここにそれがあります..。

V get()
throws InterruptedException,
      ExecutionException

必要に応じて計算が完了するのを待ってから取得しますその結果。

Returns:
    the computed result

Throws:
    CancellationException - if the computation was cancelled
    ExecutionException - if the computation threw an exception
    InterruptedException - if the current thread was interrupted while waiting

計算が完了していない場合は待機し、すでに完了している場合は、何度呼び出しても結果をできるだけ早く返します。

3
Neeraj Jain