前言
在前面一节中我们初识了锁的七大分类及特点,不了解的同学请移步锁的七大分类及特点
本文我们从悲观锁/乐观锁的分类角度出发,来学习下悲观锁及乐观锁的特点及原理。
注意:悲观锁和乐观锁是从是否锁住资源的角度进行分类的。
悲观锁
简介
悲观锁比较悲观,它认为如果不锁住这个资源,别的线程就会来争抢,就会造成数据结果错误,所以悲观锁为了确保结果的正确性,会在每次获取并修改数据时,都把数据锁住,让其他线程无法访问该数据,这样就可以确保数据内容万无一失。
这也和我们人类中悲观主义者的性格是一样的,悲观主义者做事情之前总是担惊受怕,所以会严防死守,保证别人不能来碰我的东西,这就是悲观锁名字的含义。
原理
举个例子,假设线程 A 和 B 使用的都是悲观锁,所以它们在尝试获取同步资源时,必须要先拿到锁。
假设线程 A 拿到了锁,并且正在操作同步资源,那么此时线程 B 就必须进行等待。
而当线程 A 执行完毕后,CPU 才会唤醒正在等待这把锁的线程 B 再次尝试获取锁。