java 锁

              ------------------------------ 时间不多了, 抓紧做你喜欢做的事情

为什么会有锁这个东西?

  因为在并发场景发生的时候,如果多个线程操作同一个数据,可以会造成数据出现异常问题.

  如: 同时 线程A 操作数据 data + 1, 线程B 操作数据data + 1, 那么这个数据最终为data + 1 ,出现问题了

锁到底是个什么东西?

    通过上面的话,可以知道锁其实上是一种并发情况下保证数据的原子性的思想,

    是一种保持数据原子性的方式。  

 

从设计思想划分锁,主要分为两类: 悲观锁 、 乐观锁

常见的Sychronized 就是一个悲观锁, Lock 的 ReentrantLock 就是乐观锁

什么是悲观锁?

    针对并发场景, 悲观锁认为其他的线程一定会修改我要操作的数据,所以我在修改数据的

   过程中可能会出现问题,所以悲观锁就很霸道的说,我在操作数据的时候,其他的线程不允许

   操作我的数据,只有在我操作完数据之后,其他线程才可以操作数据。

 

悲观锁的实现机制是什么?

    它是基于数据库锁的机制实现的

 

什么是乐观锁?

     针对并发场景,乐观锁认为其他的线程一般不会修改我要操作的数据,所以没有像悲观锁那样

     将数据的控制权抓在自己手里,而是每次在操作数据的时候,会去先比较现在数据库的数据有没有

     发生变化(即比较数据库中的数据和我预期的数据是否一致, 这里的一致性,不仅仅指的是数值上面

     的一致性,时间上也是一致的,只能是原来的不变的那个数据,比如A 操作了数据),如果没有发生

     变化则更新数据,如果发生变化, 则重新读取数据,再次执行操作。

 

乐观锁的实现机制是什么?

     它的实现机制是基于版本的。

 

还有很多的不足,后面逐渐添加

 

  

  

原文地址:https://www.cnblogs.com/helloqiufei/p/12006517.html