面试题之锁

问题:请你谈谈 常见的锁有哪些?

答:悲观锁,乐观锁,互斥锁,自旋锁,读写锁。



悲观锁:悲观锁是认为我们在使用共享资源时会被其他线程修改,容易导致线程安全的问题,所以在访问前总是先对共享资源进行加锁,阻塞其他线程。适用于经常进行写操作的场景



乐观锁:乐观锁通常以CAS操作和版本号机制来实现。其悲观锁相反,会直接对共享资源进行修改,但是在提交更新修改结果前会验证这修改期间有没有其他线程对该资源进行修改,如果没有则提交更新,如果有则放弃本次操作。适用于经常进行读操作而很少进行写操作的场景



互斥锁:互斥锁是最底层的一种锁,其原理是当一个线程占据了这个锁后,其他线程想加锁会加锁失败并且会被阻塞。适用于加锁部分代码的执行时间长



自旋锁:自旋锁也是基于CAS操作来实现的,任何尝试获取该锁的线程都将一直进行自旋,占用cpu的资源。直到获得该锁,并且同一时间内只能由一个线程能获得该锁。适用于加锁部分代码的执行时间短



读写锁:读锁是当没有线程持有写锁时,读锁就能被多个线程并发持有,从而提高资源利用率和访问效率,并且不存在线程安全问题;写锁是任何一个线程持有写锁时,其他线程想要获取读锁或者写锁都会被阻塞。适用于并发要求高的场景
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值