请教一个 Java 中 CompletableFuture 的问题

查看 75|回复 4
作者:dumbbell5kg   
今天在看 Redisson 代码的时候,在 RedisExecutor的 168 行发现这样一段
        connectionFuture.whenComplete((connection, e) -> {
            if (connectionFuture.isCancelled()) {
                connectionManager.getServiceManager().getShutdownLatch().release();
                return;
            }
            if (connectionFuture.isDone() && connectionFuture.isCompletedExceptionally()) {
                return;
            }
            .....
        })
我的疑问是,已经在 whenComplete 中了,isDone()不是恒为 true 的吗,为什么这里要加这个判断?

return, lly, redisson, ptio

fenglangjuxu   
蹲个后续
gosidealone   
没有吧 isDone 不包括抛出异常的情况吧 所以才要有后面那个判断?
asssfsdfw   
脱了裤子放屁(没有喷的意思
```
public boolean isDone() {
return result != null;
}
```
```
public boolean isCompletedExceptionally() {
Object r;
return ((r = result) instanceof AltResult) && r != NIL;
}
```
nothingistrue   
类上的说明,有这么一句:「 When two or more threads attempt to complete, completeExceptionally, or cancel a CompletableFuture, only one of them succeeds. 」。 所以 complete 跟 cancel 是互斥的。那么在 whenComplete 里面还去考虑 isCancelled 分支,确实是多余。
此外,isDone 也说明了:「 Returns true if completed in any fashion: normally, exceptionally, or via cancellation 」。所以 isDone 包含了 isCompletedExceptionally 。后面那个分支里面,isDone 的判断也多余。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部