“并发核心技术四大金刚”指synchronized、ReentrantLock、ConcurrentHashMap和ThreadPoolExecutor,它们围绕“安全、高效、可控的多线程协作”层层递进:synchronized保障基础同步,ReentrantLock提供精细控制,ConcurrentHashMap支撑高并发共享数据,ThreadPoolExecutor实现任务可运维调度。

Java面试中说的“并发核心技术四大金刚”,通常指:synchronized、ReentrantLock、ConcurrentHashMap 和 线程池(ThreadPoolExecutor)。这四个不是孤立知识点,而是围绕“如何安全、高效、可控地让多线程协作”这条主线层层递进的。串联回答的关键是用一条业务逻辑把它们串起来,比如:一个高并发订单查询服务。
从同步控制切入:synchronized 是最基础的“守门人”
它解决的是临界资源访问的原子性与可见性问题。比如订单状态更新方法加 synchronized,保证同一时刻只有一个线程能修改。但要注意:它锁的是对象或类,静态方法锁 Class,实例方法锁 this,混用容易出错;另外它不可中断、不支持超时、无法精细控制条件等待——这些短板,自然引出更灵活的替代方案。
进阶控制权移交:ReentrantLock 补齐 synchronized 的能力缺口
当需要响应中断(lockInterruptibly)、尝试获取锁(tryLock)、设置公平性、或者配合 Condition 实现精准唤醒(比如只通知等待库存充足的线程),就得用 ReentrantLock。它的底层是 AQS,通过 state + CLH 队列 + CAS 实现,比 synchronized 更透明、可扩展。面试官常追问“为什么 lock 要配 finally unlock”,就是在确认你理解手动释放的必要性——这是和 synchronized 自动释放的本质区别。
读多写少场景升级:ConcurrentHashMap 承担高性能共享数据结构角色
订单缓存不能用 HashMap(线程不安全),也不能简单用 Collections.synchronizedMap(读写都加锁,性能差)。ConcurrentHashMap 在 JDK8 后改用 Node 数组 + CAS + synchronized 锁单个桶的方式,把锁粒度从“整个表”降到“单个链表头”,读操作完全无锁,写操作仅锁局部。再配合 size() 的分段计数(CounterCell),支撑高并发下的统计需求。它不是万能的——复合操作如“先查后put”仍需额外同步,这时候就得靠更高层的协调机制。
立即学习“Java免费学习笔记(深入)”;
任务调度中枢:线程池把并发能力落地为可运维的系统行为
订单查询不能每次 new Thread,必须复用资源。ThreadPoolExecutor 的五个参数决定行为边界:corePoolSize 控制常驻线程、workQueue 缓冲突发流量、maximumPoolSize 应对峰值、keepAliveTime 管理弹性伸缩、handler 决定压垮时怎么取舍。比如支付回调用 SynchronousQueue + CallerRunsPolicy,宁可让调用方慢一点,也不丢任务;而数据分析任务可用 ArrayBlockingQueue + AbortPolicy,失败即报错。参数不是拍脑袋定的——CPU 密集型设为核数+1,IO 密集型可设为核数×2,并结合压测调整。
这四者串联起来,就是一个完整的并发能力演进路径:从最简同步保障 → 到精细化锁控制 → 到高性能共享容器 → 最终落到可配置、可观测、可降级的任务执行层。回答时用具体例子锚定每个点,比罗列概念更有说服力。


















