Java多线程(03)—— 锁策略与锁升级

常见的锁策略

锁的策略是指:在加锁过程中,处理锁冲突的时候的处理方式;

1. 悲观锁 & 乐观锁

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁, 这样别⼈想拿这个数据就会阻塞直到它拿到锁;

乐观锁:假设数据⼀般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生 并发冲突进行检测,如果发现并发冲突了,则会返回用户错误的信息,让用户决定如何去做;

乐观锁,在加锁前预测锁冲突的概率不大,会少做一些工作,而悲观锁预测锁冲突的概率较大,会多做一些工作;

2. 重量级锁 & 轻量级锁

轻量级锁:加锁的开销更小,加锁的速度更快;一般轻量级锁是乐观锁;

重量级锁:加锁的开销更大,加锁的速度更慢;一般重量级锁是悲观锁;

3. 自旋锁 & 挂起等待锁

自旋锁(纯用户态):是轻量级锁的典型实现,在加锁时,如果加锁不成功,会再次尝试加锁,

while (抢锁(lock) == 失败) {}

反复如此,因此,当其他线程释放锁的时候,能第一时间拿到锁,同时自旋锁也是乐观锁&#

你可能感兴趣的:(Java多线程,java,开发语言,锁,锁策略)