SuperAPI AI 工具集

concurrency-review

编程与开发

查看项目

更新于 10-16 08:35

技能介绍

用途:审查 Java 并发代码的正确性、安全性与现代实践,在问题上线前发现线程安全隐患。适用于含 synchronized、volatile、Lock 的代码,@Async、CompletableFuture、ExecutorService 用法,共享状态线程安全,虚拟线程与结构化并发代码,以及任何被多线程访问的代码。

主要能力与要点:

  • 现代并发(Java 21/25):虚拟线程适合 I/O 密集型任务,用 Executors.newVirtualThreadPerTaskExecutor();CPU 密集型宜用平台线程或 ForkJoinPool。Java 25 修复了 synchronized 导致虚拟线程固定(JEP 491)。可用 ScopedValue 替代 ThreadLocal,结构化并发(StructuredTaskScope)将子任务绑定到作用域生命周期。
  • Spring @Async 常见陷阱:缺少 @EnableAsync 会静默失效;同类内调用绕过代理而同步执行;非 public 方法无法被拦截;默认 SimpleAsyncTaskExecutor 为每任务新建线程,需配置线程池;SecurityContext 不传播,需 DelegatingSecurityContextAsyncTaskExecutor。
  • CompletableFuture:用 exceptionally/handle 处理异常,orTimeout/completeOnTimeout 设置超时,allOf/anyOf/thenCombine 组合,阻塞 I/O 应使用自定义或虚拟线程执行器。
  • 经典问题:check-then-act 竞态宜用 computeIfAbsent/AtomicInteger;循环等待标志位需 volatile 保证可见性;long/double 非原子;双重检查锁定必须 volatile 或用 holder 模式;死锁需统一加锁顺序;并发集合按场景选 ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue、ConcurrentSkipListMap;ConcurrentHashMap 嵌套 compute 存在死锁风险。

使用方式:该技能提供分级审查清单(高/中/现代模式/文档),可用 grep 命令辅助排查,如 grep -rn "synchronized" --include="*.java",以及查找 @Async、volatile、线程池、ThreadLocal、未处理异常的 CompletableFuture。

限制:资料未提供该技能的具体安装方式、平台限制、收费信息与实际使用效果,也未说明支持的具体 Java 版本范围。