------------------------------ 时间不多了, 抓紧做你喜欢做的事情
为什么会有锁这个东西?
因为在并发场景发生的时候,如果多个线程操作同一个数据,可以会造成数据出现异常问题.
如: 同时 线程A 操作数据 data + 1, 线程B 操作数据data + 1, 那么这个数据最终为data + 1 ,出现问题了
锁到底是个什么东西?
通过上面的话,可以知道锁其实上是一种并发情况下保证数据的原子性的思想,
是一种保持数据原子性的方式。
从设计思想划分锁,主要分为两类: 悲观锁 、 乐观锁
常见的Sychronized 就是一个悲观锁, Lock 的 ReentrantLock 就是乐观锁
什么是悲观锁?
针对并发场景, 悲观锁认为其他的线程一定会修改我要操作的数据,所以我在修改数据的
过程中可能会出现问题,所以悲观锁就很霸道的说,我在操作数据的时候,其他的线程不允许
操作我的数据,只有在我操作完数据之后,其他线程才可以操作数据。
悲观锁的实现机制是什么?
它是基于数据库锁的机制实现的
什么是乐观锁?
针对并发场景,乐观锁认为其他的线程一般不会修改我要操作的数据,所以没有像悲观锁那样
将数据的控制权抓在自己手里,而是每次在操作数据的时候,会去先比较现在数据库的数据有没有
发生变化(即比较数据库中的数据和我预期的数据是否一致, 这里的一致性,不仅仅指的是数值上面
的一致性,时间上也是一致的,只能是原来的不变的那个数据,比如A 操作了数据),如果没有发生
变化则更新数据,如果发生变化, 则重新读取数据,再次执行操作。
乐观锁的实现机制是什么?
它的实现机制是基于版本的。
还有很多的不足,后面逐渐添加