JAVA锁分类
2022-07-07 09:40:18 21 举报
AI智能生成
JAVA锁分类
作者其他创作
大纲/内容
线程要不要锁住资源?
锁住
悲观锁
synchronized
ReadWriteLock
ReentrantLock
ReentrantReadWriteLock
不锁住
乐观锁
CAS机制
版本号机制
StampedLock
多线程等否共享一把锁
可以
共享锁
ReadWriteLock
ReentrantReadWriteLock的读锁
不可以
独占锁/排他锁
synchronized
ReentrantLock
ReentrantReadWriteLock的写锁
多线程竞争时是否排队
排队
公平锁
FairSync
ReentrantLock(true)
先尝试插队,插队失败再排队
非公平锁
NonFairSync
ReentrantLock(false)
同一线程是否可以重复获取同一把锁
可以
可重入锁
synchronized
ReentrantLock
不可以
不可重入锁
AQS机制
是否可中断
可以
可中断锁
不可以
非可中断锁
等锁的过程
非阻塞
自旋锁
SpinLock
TicketLock
CLHLock
MCSLock
适应性自旋锁
阻塞
非自旋锁
多线程竞争同步资源的细节差异
无锁
此状态不锁资源,多个线程只有一个线程能够修改资源成功,其他的线程会进行重试
偏向锁
同一个线程执行同步资源时会自动获取该资源
轻量级锁
Lock
当多个线程竞争同步资源时,没有获取到资源的线程会进行自旋等待锁的释放
重量级锁
synchronized
当多个线程竞争同步资源时,没有获取到资源的线程会被阻塞等待唤醒
0 条评论
下一页