目录
一、锁概述
1.1 概述
1.2 三种锁的大类型
1.2.1 互斥锁(排它锁)
1.2.2 共享锁
1.2.3 读写锁
二、互斥锁
2.1 Synchronized 和 Lock 的区别
2.2 ReentrantLock 可重入锁
2.3 公平锁、非公平锁、中断锁
2.3.1 公平锁
2.3.2 非公平锁
2.3.3 可中断锁
三、悲观锁和乐观锁
3.1 悲观锁
3.2 乐观锁
3.3 适用场景
3.4 实现方式
3.4.1 悲观锁实现
3.4.2 乐观锁实现
3.5 CAS 算法
3.5.1 概述
3.5.2 运行机制
3.5.3 源码分析
3.5.4 存在的问题
四、其他名词
4.1 spinlock 自旋锁
4.1.1 概念
4.1.2 自旋锁的适用场景
4.1.3 适应性自旋锁
4.2 无锁、偏向锁、轻量级锁 、重量级锁
4.2.1 锁状态
4.2.1 重量级锁
4.2.2 偏向锁
4.2.3 轻量级锁
4.3 独享锁、共享锁
4.3.1 概念
4.4. AQS
4.4.1 概念
4.4.2 核心思想
4.4.3 详细
五、死锁、活锁、饥饿
5.1 死锁
5.1.1 概念
5.1.2 死锁的四个条件
5.1.3 死锁的解决方式
5.1.4 死锁的避免
5.2 活锁
5.2.1 概念
5.2.2 案例
5.2.3 解决方案
5.3 饥饿
六、参考博客
一、锁概述 1.1 概述在多线程环境下,为了让多线程安全地访问和使用共享变量,必须引入锁机制。锁机制即当一个线程持有锁后,其他线程只能进行等待,直到持有锁的线程释放锁,再次重新竞争锁。
1.2 三种锁的大类型锁大致可以分为互斥锁、共享锁、读写锁
1.2.1 互斥锁(排它锁)互斥锁,即只有一个线程能够访问被互斥锁保护的资源
在访问共享对象之前,对其进行加锁操作。在访问完成之后进行解锁操作。加锁后,其他试图加锁的线程会被阻塞,知道当前线程解锁。解锁后,原本等待状态的线程变为就绪状态,重新竞争锁。
1.2.2 共享锁
共享锁,即允许多个线程共同访问资源
1.2.3 读写锁
读写锁既是互斥锁,又是共享锁。在读模式下是共享锁,写模式下是互斥锁。
读读:共享
读写:互斥
写写:互斥
二、互斥锁
Synchronized 和 Lock 都是典型的互斥锁
2.1 Synchronized 和 Lock 的区别 synchronized 是 jvm 关键字,而 lock 是 java 类synchronized 不用处理异常状态下的锁释放,当资源使用完毕后或连接断开时自动释放锁,而 Lock 需要显示调用释放锁lock 接口提供了