悲观锁和乐观锁

悲观锁

悲观锁是一种利用数据库内部机制提供的锁的方法,也就是对更新的数据加锁,这样在并发期间一旦有一个事务持有了数据库记录的锁,那么其他线程将会被挂起,直到当前更新操作提交事务才能抢占资源进行更新。

悲观锁会降低性能,原因是:当一条请求抢占资源后,其他的请求就得不到资源,这时,CPU就会将这些没有得到资源的线程挂起,挂起的线程会消耗CPU的资源,尤其是在高并发的请求中。

乐观锁

悲观锁和乐观锁
乐观锁是一种不会阻塞其他线程并发的机制,不使用数据库的锁进行实现,也称为非阻塞锁,使用的是CAS原理。

CAS原理:对于多个线程共同的资源,先保存一个旧值(old value),经过逻辑处理后,查询当前数据库中的值是否与旧值相等,如果相等,就更新数据,如果不相等,说明数据库中的数据已经被其他线程修改过了,不再进行操作。