常见的锁策略

1.乐观锁和悲观锁

如果预测接下来锁冲突的概率不大,就可以少做一点工作,就称为乐观锁

如果预测借来下锁冲突的概率很大,就应该多做一点工作,就成为悲观锁

2.轻量级锁和重量级锁

轻量级锁的开销比较小

重量级锁的开销比较大

3.自旋锁和挂起等待锁

自旋锁属于是一种轻量级锁的典型实现(大多数是用户态实现,比如使用一个while循环,不停的的去检查锁是否被释放,释放了就去获取锁,没有就继续循环)

挂起等待锁,属于重量级锁的一种实现(要借助系统的api去实现,如果出现锁竞争就会在内核当中触发一系列操作,比如说让这个线程进入阻塞的状态,暂时不参与cpu的调度)

4.读写锁

读加锁:读的时候可以读但是不能写

写加锁:写的时候不可以读也不能写

两个线程在加锁的过程中:

(1)读锁和读锁之间不会产生竞争

(2)读锁和写锁之间会产生竞争

(3)写锁和写锁之间也会产生竞争

5.可重入锁和不可重入锁

对于同意一把锁加锁两次不会造成死锁就是可重入锁,如果会造成死锁则是不可重入锁

6.公平锁和非公平锁

当多个线程都尝试获取一把锁时,如果第一个线程释放锁之后,接下来谁来获取到这把锁?

如果是按照先来后到的顺序获取到锁就是公平锁,如果获取锁的机会是均等的则是非公平锁。

举例:

synchronized:

1.乐观锁和悲观锁 2.轻量级锁和重量级锁 3.自旋锁和挂起等待锁

对于以上三种锁,synchronized是自适应的,在实际过程中初始情况下,会预测发生锁冲突的概率不大,此时会以乐观锁(此时是轻量级锁并基于自旋锁的方式实现)的状态运行。

如果发生锁冲突的概率越来越大则synchronized会从乐观锁变成悲观锁(此时是重量级锁,基于挂起等待的方式实现)。

4.读写锁:synchronized不是读写锁

5.可重入锁和不可重入锁:synchronized是可重入锁

6.公平锁和非公平锁;synchronized是非公平锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值