zoukankan      html  css  js  c++  java
  • java 锁

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

    为什么会有锁这个东西?

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

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

    锁到底是个什么东西?

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

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

     

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

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

    什么是悲观锁?

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

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

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

     

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

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

     

    什么是乐观锁?

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

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

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

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

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

     

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

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

     

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

     

      

      

  • 相关阅读:
    人月神话2
    cJson 常见用法
    Python C扩展
    动态链接--运行时加载dlopen
    mtrace 简介
    Linux coredump
    动态链接--so的搜索过程
    线程同步--条件变量
    编译过程学习
    Linux 信号
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/12006517.html
Copyright © 2011-2022 走看看