**
谈谈你对锁的理解(面试题)
**
1、简述
首先要了解,锁肯定是保护数据的,而且是在并发的前提下,可能多个用户在同一时刻对这个数据进行修改,那么就可以用锁来保护与使用这个数据的安全。
2、共享锁与排它锁
**共享锁:**不会有堵塞的情况发生,允许多个用户同时读同一条数据
**排它锁:**一个用户在进行写的操作时,会阻塞其他的用户进行读写操作,这样就保证了在同一时刻只有一个用户在操作这条数据,防止了获取错误的资源。
3、悲观锁与乐观锁
**悲观锁:**在操作数据库的一条数据时,默认会认为在这个时候,可能会有其他的用户也会对这个数据进行操作(增删改),这样就会导致最终的数据不一致或者出现偏差,那么这个时候就会对这条数据进行加锁,用来保障这个线程的安全性。
**乐观锁:**在操作数据库的一条数据时,默认不会有人来进行干扰,也就是不会有其它用户会在同一时刻对这条数据进行操作,所以就不会加锁。
4、死锁与活锁
**死锁:**当有a、b两个线程时,a线程有b线程所需要的依赖,b线程也有a线程所需要的依赖,必须获取对方线程的依赖才能结束当前的线程任务,但是a、b两个线程都是加了锁的,没办法在线程结束前互相访问。
**活锁:**线程所执行的任务没有任何的问题且也未被阻塞,但是一些条件没有被满足,就会导致一直重连、失败、重连、失败…
*
若有其他补充或建议可私聊,大家一起沟通!