
AQS AbstractQueuedSynchronizer
Spring synchronized volatile | DCL

## 一、原子类(AtomicXXX)
- 基本类型原子类
- AtomicInteger/AtomicLong/AtomicBoolean
- 核心方法:getAndIncrement()、incrementAndGet()、compareAndSet()
- 底层原理:Unsafe类+CAS操作
- 引用类型原子类
- AtomicReference/AtomicStampedReference/AtomicMarkableReference
- 解决问题:ABA问题(AtomicStampedReference带版本号)
- 数组类型原子类
- AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray
- 特性:支持对数组元素进行原子操作
- 字段更新器原子类
- AtomicIntegerFieldUpdater/AtomicLongFieldUpdater/AtomicReferenceFieldUpdater
- 特性:无需修改类结构,原子更新对象的volatile字段
- 累加器原子类
- LongAdder/DoubleAdder(高并发下性能优于AtomicLong)
- 原理:分段累加,减少CAS竞争
## 二、锁类(XXXLock)
- 可重入锁
- ReentrantLock
- 核心特性:可重入、可中断、可超时、支持公平/非公平锁
- 核心方法:lock()、lockInterruptibly()、tryLock()、unlock()
- 底层原理:AQS同步器
- 读写锁
- ReentrantReadWriteLock
- 特性:读锁共享、写锁独占,支持锁降级
- 核心组件:ReadLock(读锁)、WriteLock(写锁)
- 适用场景:读多写少的并发场景
- stamped锁
- StampedLock
- 特性:支持乐观读、悲观读、写锁,性能优于ReentrantReadWriteLock
- 核心方法:tryOptimisticRead()、validate()、readLock()、writeLock()
- 其他锁
- LockSupport(线程阻塞/唤醒工具,替代synchronized的wait/notify)
- Condition(配合Lock实现精准通知,支持多条件队列)
## 三、线程同步类
- AQS(AbstractQueuedSynchronizer)
- 核心角色:同步器骨架,定义锁的获取/释放逻辑
- 核心组件:同步队列(CLH队列)、条件队列
- 核心方法:acquire()、release()、tryAcquire()、tryRelease()
- 子类实现:ReentrantLock、CountDownLatch、Semaphore等
- CountDownLatch(倒计时门闩)
- 核心功能:等待多个线程完成后再执行主线程
- 核心方法:countDown()(计数器减1)、await()(阻塞等待计数器为0)
- 特性:计数器不可重置,一次性使用
- CyclicBarrier(循环屏障)
- 核心功能:多个线程到达屏障后再同时继续执行
- 核心方法:await()(到达屏障并等待)、reset()(重置屏障,可循环使用)
- 构造参数:parties(参与线程数)、barrierAction(屏障触发后执行的任务)
- Semaphore(信号量)
- 核心功能:控制并发访问的线程数(限流)
- 核心方法:acquire()(获取许可)、release()(释放许可)
- 特性:支持公平/非公平模式,许可数可动态调整
- Exchanger(交换器)
- 核心功能:两个线程交换数据的同步工具
- 核心方法:exchange(V x)(交换数据,阻塞直到另一线程到达)
- 适用场景:线程间数据传递(如生产者-消费者交换数据)
## 四、任务执行器类(Executor体系)
- 核心接口
- Executor(顶层接口,定义execute(Runnable)方法)
- ExecutorService(扩展接口,支持任务提交、关闭线程池)
- 核心方法:submit()(返回Future)、shutdown()、shutdownNow()、awaitTermination()
- ScheduledExecutorService(定时任务接口)
- 核心方法:schedule()、scheduleAtFixedRate()、scheduleWithFixedDelay()
- 线程池实现类
- ThreadPoolExecutor(核心实现类)
- 核心参数:核心线程数、最大线程数、空闲线程存活时间、任务队列、线程工厂、拒绝策略
- 任务执行流程:核心线程→任务队列→最大线程→拒绝策略
- 拒绝策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy
- ScheduledThreadPoolExecutor(定时任务线程池)
- ForkJoinPool(分治任务线程池,支持工作窃取)
- 工具类
- Executors(线程池创建工具类,不推荐生产使用)
- 常用方法:newFixedThreadPool()、newCachedThreadPool()、newSingleThreadExecutor()、newScheduledThreadPool()
## 五、并发集合类
- ConcurrentXXX系列
- ConcurrentHashMap(并发哈希表)
- 底层结构:JDK1.8+ 数组+链表/红黑树(取消分段锁,用CAS+synchronized实现)
- 核心方法:putIfAbsent()、compute()、merge()
- 特性:支持高并发读写,线程安全
- ConcurrentLinkedQueue(并发链表队列)
- 特性:无锁(CAS)实现,非阻塞,高并发下性能优
- 核心方法:offer()、poll()、peek()
- ConcurrentLinkedDeque(并发双端队列)
- ConcurrentSkipListMap(并发跳表映射)
- 特性:有序(自然排序/自定义排序)、并发安全,替代TreeMap的并发场景
- ConcurrentSkipListSet(并发跳表集合)
- CopyOnWriteXXX系列
- CopyOnWriteArrayList(写时复制数组列表)
- CopyOnWriteArraySet(基于CopyOnWriteArrayList实现)
- 底层原理:写操作时复制原数组,修改后替换原数组引用
- 特性:读操作无锁(高性能)、写操作加锁(低性能),最终一致性
- 适用场景:读多写少的并发场景
## 六、阻塞队列类(BlockingQueue)
- 核心接口:BlockingQueue
- 核心方法:put()(阻塞存)、take()(阻塞取)、offer()(非阻塞存)、poll()(非阻塞取)
- 常用实现类
- ArrayBlockingQueue(数组阻塞队列)
- 特性:有界、FIFO,支持公平/非公平锁
- 构造参数:容量、公平性(可选)
- LinkedBlockingQueue(链表阻塞队列)
- 特性:默认无界(实际容量Integer.MAX_VALUE),可指定容量,FIFO
- SynchronousQueue(同步队列)
- 特性:无容量,存操作必须等待取操作,反之亦然
- 适用场景:线程间直接传递数据(如生产者-消费者直接交接)
- PriorityBlockingQueue(优先级阻塞队列)
- 特性:无界,按优先级排序(自然排序/自定义Comparator)
- DelayQueue(延迟队列)
- 特性:元素需实现Delayed接口,按延迟时间排序,延迟到期后才能取出
- 适用场景:定时任务、缓存过期清理
- LinkedTransferQueue(链表传输队列)
- 特性:结合SynchronousQueue和LinkedBlockingQueue优势,支持transfer()方法(阻塞直到元素被消费)
## 七、Future相关类
- 核心接口
- Future(异步任务结果接口)
- 核心方法:get()(阻塞获取结果)、get(long timeout, TimeUnit unit)(超时获取)、isDone()、cancel()
- FutureTask(Future的实现类,可包装Callable/Runnable任务)
- 状态:NEW→COMPLETING→NORMAL/EXCEPTIONAL→CANCELLED/INTERRUPTED
- 适用场景:提交单个异步任务,获取执行结果
- CompletableFuture(JDK1.8+ 异步编程工具)
- 核心特性:支持链式调用、异步回调、异常处理,无需手动阻塞获取结果
- 核心方法:
- 异步执行:runAsync()(无返回值)、supplyAsync()(有返回值)
- 回调处理:thenApply()、thenAccept()、thenRun()
- 异常处理:exceptionally()、handle()
- 组合任务:thenCombine()、allOf()、anyOf()
- 线程池支持:可指定自定义线程池,默认使用ForkJoinPool.commonPool()
## 八、其他辅助工具类
- ThreadLocal(线程本地变量)
- 核心功能:为每个线程提供独立的变量副本,避免线程安全问题
- 核心方法:set()、get()、remove()、initialValue()
- 底层原理:Thread类中的threadLocals(ThreadLocalMap)存储数据
- 注意事项:避免内存泄漏(线程池场景下需手动remove())
- 并发工具类
- TimeUnit(时间单位枚举,统一时间粒度转换)
- ThreadPoolExecutor.DiscardPolicy等(拒绝策略枚举)
- 并发计数器
- CounterDownLatch(已归类到线程同步类)
- CyclicBarrier(已归类到线程同步类)
- Phaser(阶段同步器,支持动态增减参与线程数)