广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一文秒懂Java中的乐观锁 VS 悲观锁
  • 178
分享到

一文秒懂Java中的乐观锁 VS 悲观锁

2024-04-02 19:04:59 178人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

乐观锁 VS 悲观锁 悲观锁:总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。 乐观锁:总是认为不

乐观 VS 悲观锁

悲观锁:总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。

乐观锁:总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改。
乐观锁在Java中通过使用无锁来实现,常用的是CAS,Java中原子类的递增就是通过CAS自旋实现。

在这里插入图片描述

CAS

CAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。

一个 CAS 涉及到以下操作:
我们假设内存中的原数据V,旧的预期值A,需要修改的新值B,

  1. 比较 A 与 V 是否相等。(比较)
  2. 如果比较相等,将 B 写入 V。(交换)
  3. 返回操作是否成功。

CAS的底层原理

  • 调用 Unsafe 类中的 CAS 方法,JVM 会帮我们实现出 CAS 汇编指令
  • 这是一种完全依赖于硬件的功能,通过它实现原子操作
  • 原语的执行必须是连续的,在执行过程中不允许被中断,CAS 是 CUP 的一条原子指令

CAS的三大问题

  • 如果 CAS 长时间一直不成功,会给 CPU 带来很大的开销,在Java的实现中是一只通过while循环自旋CAS获取锁。
  • 只能保证一个共享变量的原子操作
  • 引出了 ABA 问题

ABA问题

CAS需要在操作值的时候检查内存值是否发生变化,没有发生变化才会更新内存值。但是如果内存值原来是A,后来变成了B,然后又变成了A,那么CAS进行检查时会发现值没有发生变化,但是实际上是有变化的。

如何解决ABA问题
加入版本信息,例如携带 AtomicStampedReference 之类的时间戳作为版本信息,保证不会出现老的值。

UnSafe

Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、hadoopkafka等。Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。

使用Unsafe可用来直接访问系统内存资源并进行自主管理,Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。

Unsafe可认为是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。

这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手动free(不被GC回收)。如果对Unsafe类理解的不够透彻,就进行使用的话,就等于给自己挖了无形之坑,最为致命。

到此这篇关于一文秒懂乐观锁 VS 悲观锁的文章就介绍到这了,更多相关java乐观锁 悲观锁内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文秒懂Java中的乐观锁 VS 悲观锁

本文链接: https://www.lsjlt.com/news/125184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文秒懂Java中的乐观锁 VS 悲观锁
    乐观锁 VS 悲观锁 悲观锁:总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。 乐观锁:总是认为不...
    99+
    2022-11-12
  • 浅谈一下Java中的悲观锁和乐观锁
    目录悲观锁(Pessimistic Locking)悲观锁存的问题:乐观锁乐观锁存在的问题悲观锁和乐观锁的对比总结悲观锁和乐观锁是面试高频问题之一,本文将对悲观锁和乐观锁简单的进行一...
    99+
    2023-05-16
    Java悲观锁 Java乐观锁
  • 详解Java中的悲观锁与乐观锁
    目录一、悲观锁二、乐观锁三、CAS四、AtomicXXX五、CAS中的ABA问题六、ABA问题解决方案七、使用CAS会引起的问题八、Synchronized锁优化九、偏向锁十、轻量级...
    99+
    2022-11-12
  • java中乐观锁与悲观锁的概念
    这篇文章主要介绍“java中乐观锁与悲观锁的概念”,在日常操作中,相信很多人在java中乐观锁与悲观锁的概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中乐观锁与悲观锁的概念”的疑惑有所帮助!接下来...
    99+
    2023-06-19
  • MySQL中的悲观锁与乐观锁
    在关系型数据库中,悲观锁与乐观锁是解决资源并发场景的解决方案,接下来将详细讲解🔎一下这两个并发解决方案的实际使用及优缺点。 首先定义一下数据库,做一个最简单的库存表,如下设计: CREATE TA...
    99+
    2022-05-15
    MySQL 悲观锁 MySQL 乐观锁
  • 一文搞懂Mysql中的共享锁、排他锁、悲观锁、乐观锁及使用场景
    目录一、常见锁类型二、mysql引擎介绍三、常用引擎间的区别 四、共享锁与排他锁五、排他锁的实际应用六、共享锁的实际应用七、死锁的发生八、另一种发生死锁的情景九、死锁的解决方式十、意向锁和计划锁十一、乐观锁和悲...
    99+
    2022-07-04
    mysql排他锁和共享锁 mysql排它锁 共享锁 意向锁 mysql乐观锁怎么实现
  • Java中的乐观锁和悲观锁简单介绍
    这篇文章主要介绍“Java中的乐观锁和悲观锁简单介绍”,在日常操作中,相信很多人在Java中的乐观锁和悲观锁简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的乐观锁和悲观锁简单介绍”的疑惑有所...
    99+
    2023-06-02
  • Java中的悲观锁与乐观锁怎么掌握
    要掌握Java中的悲观锁和乐观锁,可以遵循以下步骤:1. 了解悲观锁和乐观锁的概念:- 悲观锁(Pessimistic Lockin...
    99+
    2023-08-12
    Java
  • MySQL中乐观锁和悲观锁的区别
    这篇文章将为大家详细讲解有关MySQL中乐观锁和悲观锁的区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。悲观锁在关系数据库管理系统中,悲观并发控制(悲观锁...
    99+
    2022-10-18
  • java中悲观锁和乐观锁有什么区别
    本篇文章给大家分享的是有关java中悲观锁和乐观锁有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • Java并发编程中的悲观锁和乐观锁机制
    这篇文章主要介绍“Java并发编程中的悲观锁和乐观锁机制”,在日常操作中,相信很多人在Java并发编程中的悲观锁和乐观锁机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发编程中的悲观锁和乐观锁机制...
    99+
    2023-06-02
  • Java并发编程的悲观锁和乐观锁机制
    本篇内容主要讲解“Java并发编程的悲观锁和乐观锁机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程的悲观锁和乐观锁机制”吧!一、资源和加锁1、场景描述多线程并发访问同一个资源问...
    99+
    2023-06-16
  • MySQL中的乐观锁,悲观锁和MVCC全面解析
    前言 在数据库的实际使用过程中,我们常常会遇到不希望数据被同时写或者读的情景,例如秒杀场景下,两个请求同时读到系统还有库存1个,然后又先后把库存更新为0,这时候就会出现超卖的情况,这时候货物的实际库存和我们的记录就...
    99+
    2022-05-19
    MySQL 乐观锁 MySQL 悲观锁 MySQL mvcc
  • MYSQL中悲观锁和乐观锁的作用是什么
    这篇文章给大家介绍MYSQL中悲观锁和乐观锁的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  悲观锁(Pessimistic Lock)  悲观锁(Pessimistic ...
    99+
    2022-10-18
  • Java并发问题之乐观锁与悲观锁的示例分析
    这篇文章将为大家详细讲解有关Java并发问题之乐观锁与悲观锁的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先介绍一些乐观锁与悲观锁:悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修...
    99+
    2023-05-30
    java
  • 从乐观到悲观:MySQL中不同类型的锁全面解析
    大家好,我是你们的小米!今天我要和大家分享关于MySQL的乐观锁和悲观锁,以及不同类型的锁。锁作为数据库中重要的概念之一,对于保证数据的一致性和并发性至关重要。现在就让我们一起来深入了解吧!   为什么需要锁 在并发访问的数据库系统中...
    99+
    2023-10-06
    mysql 数据库 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作