资讯专栏INFORMATION COLUMN

乐观锁及乐观锁的实现

livem / 469人阅读

摘要:乐观锁因为热爱,所以拼搏。乐观锁的实现实现一比如一个数据库表的结构是三个字段当进行数据的更新时,首先读取其次更新实现二算法算法,即有三个值,内存值,预期旧值,新值,比较内存值是否与当前预期值相等,如果相等,则替换新值,否则,不做任何处理。

乐观锁

因为热爱,所以拼搏。 --RuiDer

前导必备

Java并发锁的含义

悲观锁

数据库

高并发
    高并发简单理解就是在服务器中,成千上完个客户端在同一时间内发
起对服务器端的请求,包括数据的请求,这时服务器后端需要在极短时内处
理客户端的请求并且响应,在互联网平台,追求的是速度和时间,所以,
这就对服务器端有非常大的考验。
    一般客户端发起请求,服务器端接到请求,首先去处理相应的数据,
这就涉及到数据库中的数据操作,或者是缓存中的数据处理,总之要与数据库打交道。
操作数据库数据包括数据的查询,编辑,更新等。
高并发产生的问题
   不同的线程在同一时间对同一数据的读取和更新产生冲突。可能会出现线程A读取
的数据不是最新值,线程B更新的数据覆盖其他线程对该数据的更新。这些问题
都是高并发带来的,即高并发产生的问题。
高并发冲突分类:
    - 数据丢失
    - 脏读
Java提供锁的支持,通俗的理解就是锁对某些数据具有保护作用,防止某一数据在同一时间
被多个线程操作。
锁的分类:
    - 悲观锁:持保守态度,只能由某一个线程持有,其他线程等待持有锁的线程释放锁。性能差
    - 乐观锁:下面讲
    - 其他锁:像自旋锁,轻量级锁等
乐观锁概念
    对于每一个数据或者数据集合,设有一个标识version(字段),
当线程读取数据时,同时会读取出标识版本version的值,进行更
新时,首先比较当前数据库字段version的值是否与读取出的
version值相等,如果相等,则更新值,否则,作为过期值丢弃。
乐观锁的实现
实现一:
        比如一个数据库表的结构是
        id value version三个字段
        当进行数据的更新时,首先读取:
        select value version from table where id=x;
        其次更新:
            update table set value=newValue, version=oldVersion+1 where id=x and version=oldVersion;

实现二:
    cas算法:Compare And Swap算法,即有三个值,内存值,预期旧值,新值,
比较内存值是否与当前预期值相等,如果相等,则替换新值,否则,不做任何处理。
about me

我的博客

我的github

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71543.html

相关文章

  • Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    摘要:公平锁非公平锁公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。加锁后,任何其他试图再次加锁的线程会被阻塞,直到当前进程解锁。重量级锁会让其他申请的线程进入阻塞,性能降低。 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互斥锁 / 读...

    LeoHsiun 评论0 收藏0
  • MySQL 乐观锁于悲观锁

    摘要:乐观锁乐观锁实际上是一种逻辑思想,并不是数据库的特性。悲观锁利用了存储引擎的支持行锁的特性。建议在用户并发量不大的应用场景下,采用乐观锁的方式。在对数据一致性要求很高的情况下,可以牺牲一下性能,采用悲观锁。 MySQL5.5 版本之后默认采用innoDb 数据引擎.本文采用默认的存储引擎。 乐观锁 乐观锁实际上是一种逻辑思想,并不是mysql 数据库的特性。这个要区分清楚。 实现数据版...

    liuyix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<