最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文秒懂Java中的樂觀鎖 VS 悲觀鎖

 更新時間:2021年05月06日 10:38:15   作者:小劉你最強  
這篇文章主要介紹了java樂觀鎖 VS 悲觀鎖的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

樂觀鎖 VS 悲觀鎖

悲觀鎖:總是假設(shè)最壞的情況,每次取數(shù)據(jù)時都認(rèn)為其他線程會修改,所以都會加鎖(讀鎖、寫鎖、行鎖等),當(dāng)其他線程想要訪問數(shù)據(jù)時,都需要阻塞掛起。

樂觀鎖:總是認(rèn)為不會產(chǎn)生并發(fā)問題,每次去取數(shù)據(jù)的時候總認(rèn)為不會有其他線程對數(shù)據(jù)進行修改,因此不會上鎖,但是在更新時會判斷其他線程在這之前有沒有對數(shù)據(jù)進行修改。
樂觀鎖在Java中通過使用無鎖來實現(xiàn),常用的是CAS,Java中原子類的遞增就是通過CAS自旋實現(xiàn)。

在這里插入圖片描述

CAS

CAS全稱 Compare And Swap(比較與交換),是一種無鎖算法。在不使用鎖(沒有線程被阻塞)的情況下實現(xiàn)多線程之間的變量同步。java.util.concurrent包中的原子類就是通過CAS來實現(xiàn)了樂觀鎖。

一個 CAS 涉及到以下操作:
我們假設(shè)內(nèi)存中的原數(shù)據(jù)V,舊的預(yù)期值A(chǔ),需要修改的新值B,

  1. 比較 A 與 V 是否相等。(比較)
  2. 如果比較相等,將 B 寫入 V。(交換)
  3. 返回操作是否成功。

CAS的底層原理

  • 調(diào)用 Unsafe 類中的 CAS 方法,JVM 會幫我們實現(xiàn)出 CAS 匯編指令
  • 這是一種完全依賴于硬件的功能,通過它實現(xiàn)原子操作
  • 原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷,CAS 是 CUP 的一條原子指令

CAS的三大問題

  • 如果 CAS 長時間一直不成功,會給 CPU 帶來很大的開銷,在Java的實現(xiàn)中是一只通過while循環(huán)自旋CAS獲取鎖。
  • 只能保證一個共享變量的原子操作
  • 引出了 ABA 問題

ABA問題

CAS需要在操作值的時候檢查內(nèi)存值是否發(fā)生變化,沒有發(fā)生變化才會更新內(nèi)存值。但是如果內(nèi)存值原來是A,后來變成了B,然后又變成了A,那么CAS進行檢查時會發(fā)現(xiàn)值沒有發(fā)生變化,但是實際上是有變化的。

如何解決ABA問題
加入版本信息,例如攜帶 AtomicStampedReference 之類的時間戳作為版本信息,保證不會出現(xiàn)老的值。

UnSafe

Unsafe類是在sun.misc包下,不屬于Java標(biāo)準(zhǔn)。但是很多Java的基礎(chǔ)類庫,包括一些被廣泛使用的高性能開發(fā)庫都是基于Unsafe類開發(fā)的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe類在提升Java運行效率,增強Java語言底層操作能力方面起了很大的作用。

使用Unsafe可用來直接訪問系統(tǒng)內(nèi)存資源并進行自主管理,Unsafe類在提升Java運行效率,增強Java語言底層操作能力方面起了很大的作用。

Unsafe可認(rèn)為是Java中留下的后門,提供了一些低層次操作,如直接內(nèi)存訪問、線程調(diào)度等。

這個類的提供了一些繞開JVM的更底層功能,基于它的實現(xiàn)可以提高效率。但是,它是一把雙刃劍:正如它的名字所預(yù)示的那樣,它是Unsafe的,它所分配的內(nèi)存需要手動free(不被GC回收)。如果對Unsafe類理解的不夠透徹,就進行使用的話,就等于給自己挖了無形之坑,最為致命。

到此這篇關(guān)于一文秒懂樂觀鎖 VS 悲觀鎖的文章就介紹到這了,更多相關(guān)java樂觀鎖 悲觀鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中clone方法使用筆記

    Java中clone方法使用筆記

    clone顧名思義是復(fù)制,在Java語言中,clone方法被對象調(diào)用,所以會復(fù)制對象,下面這篇文章主要給大家介紹了關(guān)于Java中clone方法使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Invalid bound statement(not found):錯誤的解決方案

    Invalid bound statement(not found):錯誤的解決方案

    本文介紹了在開發(fā)Java SpringBoot應(yīng)用程序時出現(xiàn)的"Invalidboundstatement(notfound)"錯誤的原因及解決方法,該錯誤通常與MyBatis或其他持久化框架相關(guān),可能是由于配置錯誤、拼寫錯誤或其他問題引起的,解決方法包括檢查SQL映射文件
    2025-01-01
  • java優(yōu)化if-else的11種方案

    java優(yōu)化if-else的11種方案

    If-Else結(jié)構(gòu)是一種常見的條件判斷語句,通過優(yōu)化If-Else結(jié)構(gòu),可以提高代碼的可讀性和執(zhí)行效率,本文主要介紹了java優(yōu)化if-else的11種方案,感興趣的可以了解一下
    2024-08-08
  • Java序列化原理詳解

    Java序列化原理詳解

    這篇文章主要介紹了Java序列化原理詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java泛型之類型擦除實例詳解

    Java泛型之類型擦除實例詳解

    Java泛型在使用過程有諸多的問題,如不存在List<String>.class,List<Integer>不能賦值給List<Number>(不可協(xié)變),奇怪的ClassCastException等,這篇文章主要給大家介紹了關(guān)于Java泛型之類型擦除的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • RabbitMQ的消息確認(rèn)機制的詳細(xì)總結(jié)

    RabbitMQ的消息確認(rèn)機制的詳細(xì)總結(jié)

    RabbitMQ消息確認(rèn)機制指的是在消息傳遞過程中,發(fā)送方發(fā)送消息后,接收方需要對消息進行確認(rèn),以確保消息被正確地接收和處理,本文就講給大家詳解介紹RabbitMQ的幾種消息確認(rèn)機制,需要的朋友可以參考下
    2023-07-07
  • Mybatis?大數(shù)據(jù)量批量寫優(yōu)化的案例詳解

    Mybatis?大數(shù)據(jù)量批量寫優(yōu)化的案例詳解

    這篇文章主要介紹了Mybatis?大數(shù)據(jù)量批量寫優(yōu)化的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot Nacos實現(xiàn)自動刷新

    SpringBoot Nacos實現(xiàn)自動刷新

    這篇文章主要介紹了SpringBoot Nacos實現(xiàn)自動刷新,Nacos(Dynamic Naming and Configuration Service)是阿里巴巴開源的一個動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺
    2023-01-01
  • 關(guān)于JFormDesigner的安裝及破姐超詳細(xì)教程

    關(guān)于JFormDesigner的安裝及破姐超詳細(xì)教程

    JFormDesigner是一種先進的圖形用戶界面Swing?的設(shè)計工具(非開源),具有一個獨立的開發(fā)工具產(chǎn)品和基于不同開發(fā)工具如Eclipse、NetBeans等的開發(fā)插件,本文給大家介紹JFormDesigner安裝破解教程,感興趣的朋友一起看看吧
    2023-12-12
  • 深入了解Java內(nèi)部類的用法

    深入了解Java內(nèi)部類的用法

    java類的五大成員:屬性,方法,構(gòu)造器(構(gòu)造方法),代碼塊,內(nèi)部類。本文就來和大家詳細(xì)講講ava內(nèi)部類的用法,需要的小伙伴可以參考一下
    2022-07-07

最新評論

高州市| 马关县| 桃园市| 庆阳市| 游戏| 青海省| 辽阳市| 临安市| 城市| 蒙城县| 怀柔区| 长汀县| 邛崃市| 靖州| 伽师县| 股票| 天门市| 柞水县| 吉林省| 开封县| 古丈县| 宁明县| 罗甸县| 子洲县| 留坝县| 维西| 岐山县| 定边县| 浦北县| 黑水县| 越西县| 山丹县| 岑巩县| 龙州县| 乾安县| 托里县| 宜章县| 诸城市| 张家口市| 高雄县| 宜川县|