---
name: concurrency-rules
type: review_rule
when: '代码审查, review, 并发检查, 线程安全检查, 锁检查'
scope:
  - backend
products:
  - '*'
id: ka-review-rule-并发审查规则
asset_kind: review_rule
lifecycle_status: active
owner_mechanism_id: mc-generic-review
authority: supporting
routes:
  - code_change
primary_triggers:
  - 并发审查规则
secondary_triggers: []
negative_triggers: []
priority: P1
specificity: 5
version: 1.1.0
last_reviewed: '2026-06-01'
stages: ["代码审查"]
---

## CON-01: 共享可变状态无并发保护
pattern: "synchronized|ReentrantLock|AtomicInteger|volatile"
severity: critical
scope: backend
description: 涉及金额、库存、计数器的操作必须显式声明并发控制策略。若未使用任何并发控制原语，标记为需人工确认

## CON-02: 分布式环境使用 JVM 级锁
pattern: "synchronized\\s*\\(|ReentrantLock"
severity: warning
scope: backend
description: 多实例部署场景下 synchronized/ReentrantLock 无法跨 JVM，必须使用分布式锁（Redis/Redisson）

## CON-03: 先查后改未用原子操作
pattern: "SELECT.*stock|SELECT.*count|SELECT.*amount.*WHERE"
severity: warning
scope: backend
description: 库存/余额/计数器等场景禁止先 SELECT 再 UPDATE，必须使用原子操作（UPDATE SET x = x - 1 WHERE x >= 1）

## CON-04: @Transactional 同类内部调用
pattern: "this\\.|@Transactional"
severity: warning
scope: backend
description: @Transactional 方法被同类内部 this.xxx() 调用时 AOP 代理失效，事务不生效

## CON-05: 事务内执行外部调用
pattern: "RestTemplate|FeignClient|HttpClient|WebClient"
severity: info
scope: backend
description: 事务方法中执行外部 HTTP 调用会延长事务持有时间，建议移到事务外或使用 REQUIRES_NEW 隔离

## CON-06: SimpleDateFormat 非线程安全
pattern: "SimpleDateFormat"
severity: warning
scope: backend
description: SimpleDateFormat 非线程安全，多线程共享会导致日期解析错误，使用 DateTimeFormatter 或 ThreadLocal

## CON-07: ThreadLocal 未清理导致内存泄漏
pattern: /ThreadLocal\s*<|new\s+ThreadLocal/
severity: warning
scope: backend
description: ThreadLocal 必须在请求结束时 remove()，否则线程池复用会导致内存泄漏和数据串线

## CON-08: 非线程安全的集合用作类成员变量
pattern: /private\s+(?:static\s+)?(?:final\s+)?(?:HashMap|ArrayList|LinkedList|HashSet)\s*</
severity: warning
scope: backend
description: 类级别的共享集合必须使用 ConcurrentHashMap/CopyOnWriteArrayList 等线程安全实现

## CON-09: CompletableFuture 未处理异常
pattern: /CompletableFuture.*(?:thenApply|thenAccept|thenCompose)\s*\(/
severity: warning
scope: backend
description: CompletableFuture 链必须以 exceptionally() 或 handle() 结尾，防止异常被静默吞掉

## CON-10: 线程池未正确配置拒绝策略
pattern: /new\s+ThreadPoolExecutor\s*\(/
severity: warning
scope: backend
description: 线程池必须显式配置拒绝策略（CallerRunsPolicy/自定义），禁止使用默认 AbortPolicy
