导图社区 锁总结
java ,锁,乐观锁,悲观锁,lock、synchronized,aqs思维导图笔记。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
锁
悲观锁
synchronized
锁状态
无锁
没有对资源进行锁定,只有一个线程修改成功
偏向锁
不存在竞争,通过Mark Word记录偏向线程id,修改线程id时依赖一次cas
轻量级锁
偏向锁时被其他线程访问,通过自旋尝试获取锁不阻塞,自旋和cas
重量级锁
轻量级锁自旋超过次数或者被其他线程访问,操作系统线程阻塞,线程加入阻塞队列(cxq)
类型
类锁
synchronized修饰静态方法以及修饰synchronized(class)
对象锁
使用synchronized修饰非静态方法及this对象同步块
私有锁
在类内部声明一个私有object lock对象,在需要加锁的同步块内使用synchronized(lock)
由私有锁实现的等待/通知机制,lock.wait(),lock.notify(),减小锁的细粒度,减少由锁产生的开销
Lock
ReentrantLock
公平性
公平锁
非公平锁(默认)
可重入
等待队列
超时机制
超时不能获取锁,不会死锁
可中断
可对中断做出响应
ReentrantReadWriteLock
特性和ReentrantLock
读锁(共享锁)
写锁(排他锁)
锁降级
先写锁后读锁,先释放写后释放读,保证数据可见性
Condition
lock配合使用
一个lock可创建多个condition,支持多个等待队列
await、signal(同object的wait、notify)
支持响应中断,定时唤醒
AQS
semaphore
共享锁
限制访问资源的线程数
CountDownLatch
控制线程执行与阻塞,await阻塞到计数器为0,countDown计数减1,
CyclicBarrier
功能和CountDownLatch,区别是可重入,
乐观锁
CAS
原子性操作
atomic
unsafe类,通过循环和比较更新内存值操作值来更新
非阻塞、非独占
存在问题
ABA问题
解决:atomicStamedReference类
循环耗时
只能保证一个共享变量的原子性