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 回答