我刚刚开始使用completablefuture,并且已经很喜欢它了。
但在使用completablefuture时,我发现一件奇怪的事情,就是它的方法“exceptive”
假设我有一个 CompletableFuture<?> cf1.
现在,一旦数据到达,我的代码就会应用一些处理逻辑。在出现异常的情况下,我使用exceptive方法来重新计时 MyCustomException
```
cf1
.thenApply(myData->Some Processing Logic)
.exceptionally(ex-> throw new MyCustomException())
cf.get();
有趣的是,get方法的调用将无限期挂起,直到我终止程序。这是否意味着如果completablefuture从Exceptional块重新抛出异常,future将不会被标记为complete?我需要清楚地把它标记为完整吗?
1条答案
按热度按时间wgxvkvu91#
如果未来异常完成,get方法从docs抛出异常
executionexception-如果此未来异常完成
所以你可以从
exceptionally
以标识在thenApply
打电话给我get
价值方法第二条路,打电话之前
get
方法可以使用allof使未来对象完成,并检查未来是否异常完成