美文网首页
Java学习篇之乐观锁和悲观锁

Java学习篇之乐观锁和悲观锁

作者: 宜宣_6c9f | 来源:发表于2022-03-28 20:11 被阅读0次

虽然干Java很久了,但是对于悲观锁和乐观锁的定义和使用还是太少了,最近项目遇到了这样的问题,网上也有很多干货,刚好趁机学习下。

做java的都知道,在应用场景中会出现一种叫并发的问题,当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。

为了处理这种并发问题,就引出了悲观锁和乐观锁的定义。

悲观锁顾名思义,处理事物的态度很悲观,总以为别人会修改自己的数据,所以每次都对该数据进行加锁防止。悲观锁,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定状态。

乐观锁顾名思义,处理事物的态度很乐观,采取了更加宽松的加锁机制。也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制,但乐观锁不会刻意使用数据库本身的锁机制,而是依据数据本身来保证数据的正确性。

具体在业务场景中使用哪种得视情况而定了。因为二者皆有各自的优劣势。

1响应效率:如果需要非常高的响应速度,建议采用乐观锁方案,成功就执行,不成功就失败,不需要等待其他并发去释放锁。乐观锁并未真正加锁,效率高。一旦锁的粒度掌握不好,更新失败的概率就会比较高,容易发生业务失败。
2冲突频率:如果冲突频率非常高,建议采用悲观锁,保证成功率。冲突频率大,选择乐观锁会需要多次重试才能成功,代价比较大。
3重试代价:如果重试代价大,建议采用悲观锁。悲观锁依赖数据库锁,效率低。更新失败的概率比较低。
4乐观锁如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户从新操作。悲观锁则会等待前一个更新完成。这也是区别。

相关文章

  • 看完你就知道的乐观锁和悲观锁

    看完你就知道的乐观锁和悲观锁 Java 锁之乐观锁和悲观锁 [TOC] Java 按照锁的实现分为乐观锁和悲观锁,...

  • 锁的概述

    乐观锁与悲观锁 悲观锁 乐观锁和悲观锁的概念出自数据库,但在java并发包中也引入和类似的概念(乐观锁/悲观锁是一...

  • java中的乐观锁和悲观锁的区别?

    java中的乐观锁和悲观锁的区别?

  • 九、【Java 并发】锁的概述

    乐观锁 & 悲观锁 乐观锁和悲观锁是在数据库中引入的名词,但是在 Java 并发包锁里面也引入了类似的思想。 悲观...

  • java中的锁(一)

    java 锁 源码看 github java 中的锁,宏观上分为乐观锁和悲观锁乐观锁:读多写少,都是基于CAS实现...

  • 史上最全 Java 中各种锁的介绍

    锁的分类介绍 乐观锁与悲观锁 锁的一种宏观分类是乐观锁与悲观锁。乐观锁与悲观锁并不是特定的指哪个锁(Java 中也...

  • 史上最全 Java 中各种锁的介绍

    锁的分类介绍 乐观锁与悲观锁 锁的一种宏观分类是乐观锁与悲观锁。乐观锁与悲观锁并不是特定的指哪个锁(Java 中也...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • 看完你就明白的锁系列之自旋锁

    看完你就明白的锁系列之自旋锁 在上一篇文章 看完你就应该能明白的悲观锁和乐观锁中我们已经学习到了什么是悲观锁和乐观...

  • Java中的锁

    参考: java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁 Java中的锁--朱小厮 乐观锁和悲观锁 宏观...

网友评论

      本文标题:Java学习篇之乐观锁和悲观锁

      本文链接:https://www.haomeiwen.com/subject/ujfmjrtx.html