Java并发编程面试题
作为一名面过无数大厂的老Java,今天和大家系统聊聊Java并发编程面试题。准备跳槽的朋友认真看,高频考点都在这!
👉2025年最新Java面试宝典下载
提取码: 9b3g (覆盖并发/分布式/微服务等核心题型)
💡 volatile关键字有什么用?
面试官超爱问volatile!核心就两点:
- 保证可见性:线程A改了volatile变量,线程B能立刻读到新值
- 禁止指令重排:避免JVM优化打乱执行顺序
但千万注意:volatile不保证原子性! 像i++这种操作仍需加锁或用Atomic类。

🔒 synchronized底层原理
问到synchronized别慌!分层答:
- JVM层:基于Monitor机制(管程),通过
monitorenter和monitorexit指令实现 - 锁升级:无锁→偏向锁→轻量级锁(自旋)→重量级锁
- 优化手段:锁消除、锁粗化、适应性自旋
比如解释重量级锁时可以说:"竞争激烈时会挂起线程,依赖操作系统互斥量,上下文切换成本高"
🛠 线程池参数详解
线程池必考!7个核心参数要记牢:
corePoolSize:常驻核心线程数maximumPoolSize:最大线程数(救急线程)keepAliveTime:救急线程存活时间workQueue:任务队列(ArrayBlockingQueue/LinkedBlockingQueue)threadFactory:线程创建工厂handler:拒绝策略(AbortPolicy/CallerRunsPolicy等)
举个实际场景:电商大促时突发流量,队列满且线程数达max,会触发拒绝策略。推荐用CallerRunsPolicy让主线程自己执行,避免雪崩。
⚙ AQS工作原理
AbstractQueuedSynchronizer是并发包基石!关键点:
- 核心结构:state变量+CLH双向队列
- 实现类:ReentrantLock/Semaphore/CountDownLatch都基于它
- 获取锁流程:
- tryAcquire()尝试直接获取
- 失败后addWaiter()加入队列
- 自旋判断是否轮到当前节点
- 获取成功出队列
🔄 CAS的ABA问题
CAS虽高效但要警惕ABA陷阱:
- 线程1读到变量值为A
- 线程2改A→B→A
- 线程1用CAS发现还是A,误以为没修改过
解决方案:
- 加版本号(如AtomicStampedReference)
- 用时间戳标记状态变化
🗂 ConcurrentHashMap优化
JDK1.7 vs 1.8区别是必考题:
- JDK1.7:分段锁(Segment继承ReentrantLock)
- JDK1.8:
- 抛弃分段锁
- 采用
synchronized+CAS+volatile - 链表转红黑树(节点>8)
- 并发扩容协助机制
实际性能对比:1.8的写并发提升3倍以上,因为锁粒度缩小到链表头节点。
💰 特别福利
如果需要开通面试鸭会员,通过👉 面试鸭返利网 找我下单可返25元!覆盖所有主流IT题库:

高频Java并发编程面试题就整理这些。理解原理+背熟话术,拿下30K offer真不难!


