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

    锁作为 并发共享数据,保证一致性的工具,在java平台有多种实现方式.根据性质来分锁分为很多种,例如,自旋锁,阻塞锁,读写锁,互斥锁等等.

    今天介绍的是锁的两种分类(从思想上分),乐观锁和悲观锁.

    悲观锁:
          来自百度百科,悲观锁,正如其名,具有强烈的独占和排他特性.它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,
          因此,在整个数据处理过程中,将数据处于锁定状态.
          个人理解就是悲观锁对修改数据这件事情持悲观状态,所以他必须要独占数据,让数据修改的过程中只有一个人在操作这个数据(原子操作).
          举例:
                传统型数据库中如表锁,行锁都是操作之前先上锁,都属于悲观锁,又如jdk中synchronized关键字也是悲观锁的一种.

    乐观锁:
          乐观锁(Optimistic Locking)相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制.顾名思义就是对待数据是否被更改这件事持乐观态度,每次去查询数据的时候认为
          数据不会被修改,所以不会上锁,但是在更新的时候会去判断此数据是否被修改,判断的依据就是加在这个数据上面的某个状态,比如版本号,时间戳等.
          举例:
                redis中事务使用了乐观锁,mysql中有mvcc机制也是乐观锁的一种,jdk中各种原子类(cas实现).

    总结,两者比较:

        1:乐观锁适用并发量大,读大于写的场景
        2:只有冲突非常严重的系统才需要悲观锁
        3:悲观锁的开销一般大于乐观锁

     

  • 相关阅读:
    Laravel 底层原理:门面(Facades)
    用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串
    今天发现一个好用的查询IP地址的工具,记录一波
    Ubuntu下安装SDL
    敏捷宣言
    python 读取xml文档
    每个程序员都必须遵守的编程原则
    作为Web开发人员,我为什么喜欢Google Chrome浏览器
    爬虫
    Python为什么要self
  • 原文地址:https://www.cnblogs.com/coldridgeValley/p/5120047.html
Copyright © 2011-2022 走看看