You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CompletableFuture调用两次get时supplyAsync部分是否会重复执行?

结论

不会触发两次外部HTTP接口调用,CompletableFuture的运行逻辑和get方法的调用次数、超时设置完全无关。


具体运行规则说明
  • 任务启动时机:CompletableFuture.supplyAsync(...)这行代码执行完成的瞬间,你写在lambda里的HTTP调用逻辑就已经被提交到异步线程池开始执行,不需要等待get方法被调用才启动。
  • get方法的本质:get只负责阻塞等待当前异步任务的执行结果,本身不会触发任务重新执行。无论你调用多少次get、每次设置的超时时间差异多大,都是等待同一个异步任务的结果。
  • 超时场景的特殊说明:如果第一次get设置的超时时间太短,抛出TimeoutException,只是当前等待的线程终止等待,正在跑的HTTP调用任务不会被中断。第二次调用get时,如果任务已经执行完成,会直接返回缓存的结果;如果还在执行,会按照第二次设置的超时时间继续等待。

验证方法

你可以在lambda内部加一行打印日志,测试多次调用get的场景,会发现日志只会输出一次,足以证明HTTP调用只会执行一次。

注意:只有每次调用supplyAsync生成新的CompletableFuture实例时,才会触发新的HTTP接口调用。


内容的提问来源于stack exchange,提问作者Teddy Dong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:12:02