惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
L
LangChain Blog
博客园 - 司徒正美
G
Google Developers Blog
博客园 - 【当耐特】
GbyAI
GbyAI
月光博客
月光博客
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
D
Docker
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
博客园 - 聂微东

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? 工业软件的大佬们是怎么 vibe coding 的 最近 chrome 是不是有 bug 啊,一搜索就卡住 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的
Java 的 CompletableFuture API 日常开发中使用得多么,怎么...
movq · 2026-06-18 · via 程序员

我是 Java 程序员,但我也知道 JS 里面有个Promise,感觉Promise的语法比 Java 的CompletableFuture这套 API 优雅很多。Promise总共也需要知道then,catch两种语句,而CompletableFuture则各种方法都有十几二十个了。

还有些匪夷所思的行为,比如下面这个:

同步编排(无 Async 后缀)的方法,例如thenCompose不会把任务重新提交给线程池排队,而是尽量复用现有的线程。具体用哪个线程,取决于代码运行时的时机

情况 A (前置任务还没执行完): 当你调用 thenCompose 时,如果前置任务还在跑,那么 thenCompose 里的代码会在前置任务所在的线程中接着运行。

情况 B (前置任务已经执行完了): 当你调用 thenCompose 时,如果前置任务早就跑完了,那么 thenCompose 里的代码会在当前调用代码的主线程( Caller Thread )中立刻运行。

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
    // 假设在 ForkJoinPool-1 线程执行
    return "Hello"; 
});

// 因为没有 Async ,它会尝试复用线程
future1.thenCompose(result -> {
    // 如果 future1 刚执行完,这里大概率还是在 ForkJoinPool-1 线程执行
    // 如果 future1 早就执行完了,这里会在 Main 线程执行
    return CompletableFuture.supplyAsync(() -> result + " World"); 
});

那程序员调这个方法的时候,相当于遇到不确定性行为(nondeterministic behavior)了。我都不知道我要调的方法到底是在哪个线程执行,会不会把当前线程卡住