Appearance

JUC - 锁

Double

JUC - 锁

一、 锁的分类

1. 可重入锁、不可重入锁

重入:当前线程获取到锁 A 后,再次尝试获取锁 A 是可以获取到的。

  • synchronized

不可重入:当前线程获取到锁 A 后,再次尝试获取锁 A 是获取不到的,因为锁 A 已被当前线程占用。

2. 客观锁、悲观锁

悲观锁:线程尝试获取锁失败后会进入挂起状态(Block、Waiting、Time-Waiting)状态。

  • synchronized
  • ReentrantLock

乐观锁:线程尝试获取锁失败后会再次尝试获取锁,直至成功获取到锁。

  • CAS

3. 公平锁、非公平锁

公平锁:获取锁的顺序和尝试获取锁的顺序一致。在未获取到锁的时候按照尝试获取锁的顺序排队等待。

非公平锁:获取锁的顺序和尝试获取锁的顺序不一致。当等待队列中有其他线程时,新线程也会尝试获取锁,当获取不到时再进入等待队列。

4. 互斥锁、共享锁

互斥锁:同一把锁,同一时刻只能由一个线程持有。

共享锁:同一把锁,同一时刻能被多个线程持有。

二、 深入 synchronized

1. 类锁、对象锁

2. synchronized 的优化

3. synchronized 的基本原理

4. synchronized 的锁升级

5. 重量锁底层 ObjectMonitor

三、 深入 ReentrantLock

1. ReentrantLock 和 synchronized 的区别

2. AQS 概述

3. 加锁流程源码分析

4. 释放锁流程源码分析

5. AQS 常见的问题

6. ConditionObject

四、深入ReentrantReadWriteLock

1. 为什么要出现读写锁

2. 读写锁的实现原理

3. 写锁分析

4. 读锁分析

4.1 读锁加锁流程概述

五、死锁问题

最后更新时间 2025/1/18 16:40:50