2012-08-02 7 views
5

私はFutureTask.isDone()のJava FutureTaskの完了チェック

ことをいくつかの情報を提供しますが、私は、タスクが完了または任意のエラーで終了しているかどうかを確認する必要がOracleのJava APIを、チェックしています。 isDone()メソッドは、完了または終了しても返されます。しかし、私はそれが何らかの問題のために完了したのか終了したのかを知る必要があります。

答えて

11

FutureTaskが完了している場合は、後でget()に電話してください(タイムアウトがない場合はすぐに戻ります)。これは、どちらかのいくつかの結果を返すか、スローされます。

ExecutionExceptionを - 計算は、あなたのタスクからスローされた例外を返します例外

ExecutionException.getCause()を投げた場合。

+0

'FutureTask'がまだ完了していなくても' get() 'を呼び出すことができます。この場合、get()は完了を待ちます。 – Pino

0

FutureTask.get()に電話をかけてみませんか?

これは結果を返すか、もともと投げられた/捕らえられた例外を含む例外をスローします。タスクが完了していない場合、ditはブロックされ、タイムアウトを指定するオプションがあります。

私は通常は、クライアントは単に一度作成した順番に各FutureTaskget()を呼び出すのではなく、isDone()をポーリングを期待します。

0

isDone()がtrueを返した場合は、get()メソッドを呼び出して実行結果を確認してください。 get()操作はExecutionExceptionを投げることができますが、これは原因で問題が見つかる可能性があります。

+1

'isDone()'がまだfalseであっても 'get()'を呼び出すことができます。この場合、get()は完了を待ちます。 – Pino

関連する問題