JUC 面试知识点大纲
一、JUC 基础概念
- 并发与并行的区别
- 进程、线程、纤程的概念与关系
- 线程的生命周期及状态转换
- NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
- 同步与异步、阻塞与非阻塞的区别
- 线程安全的定义及实现方式
二、线程池(Executor 框架)
- 线程池的核心参数
- corePoolSize、maximumPoolSize、keepAliveTime、workQueue、handler
- 线程池的工作原理及任务执行流程
- 常见线程池类型及适用场景
- FixedThreadPool
- CachedThreadPool
- SingleThreadExecutor
- ScheduledThreadPoolExecutor
- 线程池的拒绝策略及自定义方式
- 线程池的监控与调优
- ThreadPoolExecutor 的扩展(beforeExecute、afterExecute)
三、锁机制
- synchronized 关键字
- 实现原理(对象头、Monitor)
- 锁升级过程(无锁→偏向锁→轻量级锁→重量级锁)
- 可重入性与可见性保证
- Lock 接口及其实现类
- ReentrantLock(可重入锁)
- ReentrantReadWriteLock(读写锁)
- StampedLock(邮戳锁)
- 锁的特性对比
- Condition 接口的使用(await/signal/signalAll)
- 锁优化技术(锁消除、锁粗化、偏向锁、轻量级锁)
四、原子操作类(java.util.concurrent.atomic)
- 原子类的分类及使用场景
- 基本类型(AtomicInteger、AtomicLong 等)
- 引用类型(AtomicReference 等)
- 数组类型(AtomicIntegerArray 等)
- 字段更新器(AtomicIntegerFieldUpdater 等)
- CAS 操作原理及 ABA 问题
- Unsafe 类的作用及使用限制
五、并发容器
- List/Set 相关
- CopyOnWriteArrayList
- CopyOnWriteArraySet
- ConcurrentSkipListSet
- Map 相关
- ConcurrentHashMap(JDK7 与 JDK8 实现差异)
- ConcurrentSkipListMap
- Queue 相关
- 阻塞队列(ArrayBlockingQueue、LinkedBlockingQueue 等)
- 非阻塞队列(ConcurrentLinkedQueue)
- 延迟队列(DelayQueue)
六、线程同步工具
- CountDownLatch(倒计时器)
- CyclicBarrier(循环屏障)
- Semaphore(信号量)
- Exchanger(交换器)
- Phaser(阶段同步器)
七、ThreadLocal
- 基本原理及实现(Thread、ThreadLocal、ThreadLocalMap 关系)
- 内存泄漏问题及解决方式
- 应用场景(线程上下文、事务管理等)
- InheritableThreadLocal 的作用
八、并发编程模式
- 生产者-消费者模式
- 读写分离模式
- 线程池模式
- Future 模式(Future、FutureTask)
九、JDK8+ 并发新特性
- CompletableFuture(异步编程)
- 并行流(Parallel Stream)
- StampedLock 的改进
十、JVM 并发相关
- 内存模型(JMM)
- 主内存与工作内存
- 内存可见性、原子性、有序性
- happens-before 规则
- volatile 关键字
- 内存语义(可见性、禁止重排序)
- 实现原理(内存屏障)
- 与 synchronized 的区别
十一、并发问题排查与调试
- 死锁的检测与避免
- 线程 dump 分析
- 常用并发调试工具(jstack、jconsole、visualvm)
十二、经典并发案例分析
- 单例模式的线程安全实现
- 线程池的合理配置实践
- ConcurrentHashMap 的扩容机制
- 阻塞队列在生产者-消费者模型中的应用