zoukankan      html  css  js  c++  java
  • 乐观锁与悲观锁

    1.悲观锁:

    悲观锁是一种比较悲观的思想,认为每次操作都会修改变量的值,因此每次对变量就行操作都会进行加锁;

    数据库中的行锁,表锁,读锁,写锁都是悲观锁的实现;

    java中的syschronized关键字也是悲观锁的实现;

    2.乐观锁:

    乐观锁就是一种比较乐观的思想,认为每次操作都不会进行修改变量,所以每次操作都不会进行上锁;

    但是在每次进行更新操作的时候会判断在此期间是否修改变量的值,常用的实现方式的cas操作;

    java中的juc包下的automic包下的类都是采用CAS操作实现乐观锁;

    3.CAS操作:

    (1)CAS操作过程:首先需要进行读写操作的变量的内存位置V,然后需要变量的预期的原始值A,和进行修改操作的拟写入新值B;

    若变量的预期原始值A与变量的内存位置相匹配,则将拟写入新值B赋给该变量,否则进行循环获取最新的预期原始值A;

    在多个线程并发进行修改操作的时候,只有一个线程会获得执行,其他线程并不会被阻塞,而是会被通知获取执行失败;

    (2)CAS操作的缺点:

    首先就是CAS操作存在ABA问题;

    其此是CAS操作只能对一个变量进行操作;

    CAS操作会占用CPU资源,降低吞吐量;

    详细内容参考:https://www.cnblogs.com/qjjazry/p/6581568.html

  • 相关阅读:
    SolrCloud阶段总结
    Solr总结
    机器学习算法与Python实践之(六)二分k均值聚类
    机器学习问题方法总结
    浅谈Kmeans聚类
    AVL树的算法思路整理
    Solr4.6从数据库导数据的步骤
    红黑树
    浅谈 Adaboost 算法
    POJ 1836 Alignment
  • 原文地址:https://www.cnblogs.com/xuzhiyuan/p/9272711.html
Copyright © 2011-2022 走看看