6

私は持っていてFuture、その状態が何であるかを知りたいです。私が念頭に置いていたのは、次のようなコードです。

try {
    // Is that a good idea? Counting on exceptions looks weird.
    future.get(0, TimeUnit.MICROSECONDS);
    this.status = DONE;
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    throw Throwables.propagate(e);
} catch (ExecutionException e) {
    this.status = FAILED;
} catch (TimeoutException e) {
    this.status = RUNNING;
} catch (CancellationException e) {
    this.status = CANCELED;
}

はロックを保持しようとするようFutureTaskで、ロックを取得できる場合はFutureの状態をチェックします。だから、それは良い考えのようです。

ここで見逃している落とし穴はありますか?

4

1 に答える 1

3

コメントで提案されているようFuture.isDone、実行ステータスを確認するために使用してください。get()ただし、例外をチェックして、正常に完了したかどうかを判断するために呼び出す必要があります。

于 2012-12-25T09:10:37.833 に答える