zoukankan      html  css  js  c++  java
  • Java中的锁之乐观锁与悲观锁

    1、  分类一:乐观锁与悲观锁

      a)悲观锁:认为其他线程会干扰本身线程操作,所以加锁

                            i.具体表现形式:synchronized关键字lock实现类

      b)乐观锁:认为没有其他线程会影响本身线程操作,所以不加锁

                            i.具体表现形式:java的原子类的递增操作

                           ii.原理:采用cas算法

      c)Cas算法:交换与比较

                            i.涉及三个数:需要读写的内存值V,进行比较的值A,要写入的新值B

                           ii.具体操作:若A=V,就用B更新V,否则不进行任何操作

                          iii.会用ABA问题:cas算法需要判断内存值V是否发生变化,如果a值变成b值然后又变回a值,cas算法就会无法判断,产生错误。解决上问题:在变量前添加版本号,将aba变成1a2b3c

                          iv.循环时间长开销大,因为自旋需要消耗cpu

                           v.只能保证一个共享变量的原子操作

    2、  分类二

      a) 重入锁:支持重进入的锁,排它锁

    3、  分类三

      a)读写锁:一对锁,读锁,写锁,在同一时刻允许多线程访问

  • 相关阅读:
    js用8421码实现10进制转2进制
    什么?toggle(fn1, fn2)函数在1.9版本jq被移除? 来来来,自己撸一个
    js获取鼠标点击的对象,点击另一个按钮删除该对象
    html5小结
    iphone状态栏高度?
    制作手机相册 全屏滚动插件fullpage.js
    js 相关知识整理(一)
    css 居中问题
    进度条
    @Html.Raw()
  • 原文地址:https://www.cnblogs.com/chenzhuantou/p/10151981.html
Copyright © 2011-2022 走看看