J

Java 并发面试题

连载中

Java 并发编程面试题:JMM、synchronized 与锁、线程池、AQS 与并发容器。

5 篇文章 开始阅读

教程目录

1

synchronized 和 ReentrantLock 的区别?

一、底层实现 synchronized:JVM 级,字节码指令 monitorenter/monitorexit,依赖对象头的 Mark Word。 ReentrantLock:JDK 级,基于 AQS(AbstractQueuedSynchronizer)实现。 二、对比 维度 synchroni

2

线程池的核心参数与工作流程?

一、七大核心参数 corePoolSize:核心线程数,即使空闲也保留。 maximumPoolSize:最大线程数。 keepAliveTime:非核心线程空闲存活时间。 unit:时间单位。 workQueue:阻塞队列。 threadFactory:线程工厂。 handler:拒绝策略。 二、

3

AQS 的原理是什么?

一、定义 AQS(AbstractQueuedSynchronizer)是 JUC 锁的基础框架,用一个 int 状态变量(state)和一个 FIFO 等待队列实现同步。 二、核心 state:同步状态,0 表示空闲,>0 表示被占用。 CLH 队列:未获取锁的线程封装成 Node 入队,自旋 +

4

volatile 关键字的作用?

一、两大作用 可见性:被 volatile 修饰的变量,一个线程修改后其他线程立即可见。实现:写入时立即刷新主内存,读取时从主内存重新加载。 禁止指令重排:在读写操作前后插入内存屏障。 二、不保证原子性 volatile int count = 0; count++; // 不是原子操作,多线程

5

CountDownLatch 和 CyclicBarrier 的区别?

一、CountDownLatch 一个或多个线程等待其他线程完成后再继续。 用计数器实现,countDown() 减 1,await() 等待归零。 一次性,归零后不能重置。 场景:主线程等待多个子任务完成。 二、CyclicBarrier 一组线程互相等待,全部到达屏障点后一起继续。 可循环使用,