我把 CompletableFuture 踩坑经验写成了 AI Skill,比自己写代码还靠谱
写了五年 Java团队快把CompletableFuture 的坑踩了个遍。在 Stream 里 join()以为并行其实串行。用 thenApply 没加 Async回调跑到 Delayer 线程上把全局调度卡死。嵌套 join() 导致线程池死锁排查了三天。allOf 以为是 fail-fast傻等所有任务超时才返回。很多踩坑和避坑都是线上事故换来的。半夜 oncall周末加班 debug。后来我把这些写成博客20 多篇总结了 8 个常见陷阱。那篇《CompletableFuture 超时功能有大坑》阅读量 6000。但说实话90% 的读者下次写代码还是会犯同样的错。不是不想记是记不住。然后我想这些规则 AI 能记住。博客的问题传统路径是这样踩坑总结写博客读者看读者记读者用。链路太长了。人会忘AI 不会。我试着把这些规则写成 Skill。现在的路径变成踩坑总结写 SkillAI 实时检查问题直接拦截。知识不用记了自动执行。这个 Skill 干什么三种模式。Code Review你写完代码它逐项检查。迭代中 join串行执行嵌套 join死锁风险不带 Async阻塞调度线程同步异常逃逸allOf 非快速失败超时不取消异常被吞默认线程池。八个坑按严重程度分类。实现指导你说需求它直接给代码。比如并发查询多个用户任一失败立即返回javaListCompletableFutureUser cfs userIds.stream().map(id - CompletableFuture.supplyAsync(() - userService.getById(id), executor)).toList();// CfIterableUtils 来自 CFFU 库https://github.com/foldright/cffuListUser users CfIterableUtils.allResultsFailFastOf(cfs).orTimeout(3, TimeUnit.SECONDS).exceptionallyAsync(ex - {log.error(批量查询失败, ex);throw new BusinessException(查询失败, ex);}, executor).join();显式执行器快速失败超时控制Async 后缀全带上了。问题诊断线程池满了检查嵌套 join。任务超时还在跑解释 orTimeout 不取消任务。exceptionally 没捕获异常查同步异常逃逸。对比一下普通开发写的javapublic ListResult queryAll(ListString ids) {return ids.stream().map(id - CompletableFuture.supplyAsync(() - query(id))).map(cf - cf.join()).toList();}看着像并发跑起来是串行。没超时控制可能无限阻塞。没异常处理炸了直接抛。用默认线程池跟别的任务抢资源。Skill 指导后javapublic ListResult queryAll(ListString ids) {CompletableFuture?[] cfs ids.stream().map(id - CompletableFuture.supplyAsync(() - query(id), businessExecutor)).toArray(CompletableFuture[]::new);// CFFU 提供快速失败语义原生 allOf 会等所有任务完成return CfIterableUtils.allResultsFailFastOf(cfs).orTimeout(3, TimeUnit.SECONDS).exceptionallyAsync(ex - {log.error(批量查询失败, ex);return Collections.emptyList();}, businessExecutor).join();}代码量差不多但一个能上线一个不能。当前工作流踩坑写博客沉淀思考提取规则写成 Skill项目里验证迭代优化。这个 Skill 就是这么来的。20 多篇博客变成 8 条陷阱清单6 条最佳实践变成 Checklist无数次 oncall 变成诊断流程。工程师的角色在变以前写代码现在写约束。以前培训新人现在训练 AI。以前 Code Review 人工看现在自动检查。以前经验在脑子里现在经验在 Skill 里。这个 completablefuture-optimizer 就是个例子。它是约束让 AI 只能输出符合最佳实践的代码。它是知识库包含所有已知陷阱。它是自动化 Code Review。以后可能每个资深开发都有自己的 Skill 库。DBA 有 SQL 优化的架构师有设计模式的SRE 有故障排查的。经验不再是只能靠带新人传递的东西可以直接让 AI 执行。Skill 获取good-skills/completablefuture-optimizer使用方式把 Skill 放到 ~/.claude/skills/completablefuture-optimizer/SKILL.md然后跟 Claude 说review 这段异步代码或者帮我实现并发查询。CFFU 库github.com/foldright/c…原文链接https://juejin.cn/post/7616129123816112155