JUC - 锁
Double
JUC - 锁
一、 锁的分类
1. 可重入锁、不可重入锁
重入:当前线程获取到锁 A 后,再次尝试获取锁 A 是可以获取到的。
- synchronized
不可重入:当前线程获取到锁 A 后,再次尝试获取锁 A 是获取不到的,因为锁 A 已被当前线程占用。
2. 客观锁、悲观锁
悲观锁:线程尝试获取锁失败后会进入挂起状态(Block、Waiting、Time-Waiting)状态。
- synchronized
- ReentrantLock
乐观锁:线程尝试获取锁失败后会再次尝试获取锁,直至成功获取到锁。
- CAS
3. 公平锁、非公平锁
公平锁:获取锁的顺序和尝试获取锁的顺序一致。在未获取到锁的时候按照尝试获取锁的顺序排队等待。
非公平锁:获取锁的顺序和尝试获取锁的顺序不一致。当等待队列中有其他线程时,新线程也会尝试获取锁,当获取不到时再进入等待队列。
4. 互斥锁、共享锁
互斥锁:同一把锁,同一时刻只能由一个线程持有。
共享锁:同一把锁,同一时刻能被多个线程持有。