日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

什么鎖比讀寫鎖性能更高?

來源: 責編: 時間:2024-05-16 09:04:45 158觀看
導讀在并發(fā)編程中,讀寫鎖 ReentrantReadWriteLock 的性能已經(jīng)算是比較高的了,因為它將悲觀鎖的粒度分的更細,在它里面有讀鎖和寫鎖,當所有操作為讀操作時,并發(fā)線程是可以共享讀鎖同時運行的,這樣就無需排隊執(zhí)行了,所以執(zhí)行效率也

在并發(fā)編程中,讀寫鎖 ReentrantReadWriteLock 的性能已經(jīng)算是比較高的了,因為它將悲觀鎖的粒度分的更細,在它里面有讀鎖和寫鎖,當所有操作為讀操作時,并發(fā)線程是可以共享讀鎖同時運行的,這樣就無需排隊執(zhí)行了,所以執(zhí)行效率也就更高。ScB28資訊網(wǎng)——每日最新資訊28at.com

那么問題來了,有沒有比讀寫鎖 ReentrantReadWriteLock 性能更高的鎖呢?ScB28資訊網(wǎng)——每日最新資訊28at.com

ScB28資訊網(wǎng)——每日最新資訊28at.com

答案是有的,在 Java 中,比 ReentrantReadWriteLock 性能更高的鎖有以下兩種:ScB28資訊網(wǎng)——每日最新資訊28at.com

  • 樂觀鎖:樂觀鎖是一種非阻塞鎖機制,它是通過 Compare-And-Swap(CAS)對比并替換來進行數(shù)據(jù)的更改的,它假設多個線程(或進程)之間很少會發(fā)生沖突,因此不會加鎖,只有在需要修改之后,通過對比并替換來修改共享變量的值,因此它在非高并發(fā)的環(huán)境下的性能是非常高的。
  • StampedLock:它是 JDK 8 中新增的鎖類型,它提供了三種鎖模式:讀鎖、寫鎖和樂觀讀鎖。相較于 ReentrantReadWriteLock,StampedLock 提供了更細粒度的控制,支持樂觀讀取操作,可以提高并發(fā)性能。

1.樂觀鎖

樂觀鎖在 Java 中最常見的實現(xiàn)就是 atomic 家族下的類,例如 AtomicInteger、AtomicLong 等,它的核心方法中使用了 CAS 對比并替換進行變量的修改操作,如下源碼所示:ScB28資訊網(wǎng)——每日最新資訊28at.com

public final int incrementAndGet() {    return U.getAndAddInt(this, VALUE, 1) + 1;}public final int getAndAddInt(Object o, long offset, int delta) {    int v;    do {        v = getIntVolatile(o, offset);    } while (!weakCompareAndSetInt(o, offset, v, v + delta)); // CAS 方法    return v;}

然而,如果是高并發(fā)環(huán)境下,那么樂觀鎖可以需要通過多次自旋才能成功修改變量的數(shù)據(jù),這種場景下,樂觀鎖的性能可能就不如 ReentrantReadWriteLock 了。ScB28資訊網(wǎng)——每日最新資訊28at.com

2.StampedLock

StampedLock 有三種讀寫方法:ScB28資訊網(wǎng)——每日最新資訊28at.com

  • readLock:讀鎖,用于多線程并發(fā)讀取共享資源。
  • writeLock:寫鎖,用于獨占寫入共享資源。
  • tryOptimisticRead:讀樂觀鎖,用于在不阻塞其他線程的情況下嘗試讀取共享資源。

其中 readLock() 和 writeLock() 方法與 ReentrantReadWriteLock 的用法類似,而 tryOptimisticRead() 方法則是 StampedLock 引入的新方法,它用于非常短的讀操作。ScB28資訊網(wǎng)——每日最新資訊28at.com

因此,我們在加鎖時,可以使用性能更高的讀樂觀鎖來替代傳統(tǒng)的讀鎖,如果能加鎖成功,則它可以和其他線程(即使是寫操作)一起執(zhí)行,也無需排隊運行(傳統(tǒng)讀鎖遇到寫鎖時需要排隊執(zhí)行),這樣的話 StampedLock 的執(zhí)行效率就會更高,它是使用如下:ScB28資訊網(wǎng)——每日最新資訊28at.com

// 創(chuàng)建 StampedLock 實例StampedLock lock = new StampedLock();// 獲取樂觀讀鎖long stamp = lock.tryOptimisticRead(); // 讀取共享變量if (!lock.validate(stamp)) { // 檢查樂觀讀鎖是否有效    stamp = lock.readLock(); // 如果樂觀讀鎖無效,則獲取悲觀讀鎖    try {        // 重新讀取共享變量    } finally {        lock.unlockRead(stamp); // 釋放悲觀讀鎖    }}// 獲取悲觀讀鎖long stamp = lock.readLock(); try {    // 讀取共享變量} finally {    lock.unlockRead(stamp); // 釋放悲觀讀鎖}// 獲取寫鎖long stamp = lock.writeLock(); try {    // 寫入共享變量} finally {    lock.unlockWrite(stamp); // 釋放寫鎖}

使用樂觀讀鎖的特性可以提高讀操作的并發(fā)性能,適用于讀多寫少的場景。如果樂觀讀鎖獲取后,在讀取共享變量前發(fā)生了寫入操作,則 validate 方法會返回 false,此時需要轉換為悲觀讀鎖或寫鎖重新訪問共享變量。ScB28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-88329-0.html什么鎖比讀寫鎖性能更高?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 這一次,徹底搞懵 CRDT

下一篇: YOLOv8 中的損失函數(shù)解析

標簽:
  • 熱門焦點
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產(chǎn)之后
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發(fā)布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發(fā)布,本次就這款耳機新品給大家?guī)硪粋€簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產(chǎn)
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 《英雄聯(lián)盟》夏季賽總決賽今日開打!JDG對陣LNG首發(fā)名單來了 Knight:準備三連冠

    8月5日消息,今日17:00,《英雄聯(lián)盟》2023LPL夏季賽總決賽將正式開打,由JDG對陣LNG。對兩支隊伍來說,這場比賽不僅要爭奪夏季賽冠軍,更要決定誰才是LPL賽區(qū)一
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統(tǒng)提供非預期的輸入并監(jiān)視異常結果來發(fā)現(xiàn)軟件漏洞的方法。可以用來發(fā)現(xiàn)應用程序、操作系統(tǒng)和網(wǎng)絡協(xié)議等中的漏洞或
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
Top 主站蜘蛛池模板: 赤城县| 吉木乃县| 正安县| 聂拉木县| 南开区| 塔城市| 辽阳市| 霍州市| 化德县| 五河县| 垫江县| 林甸县| 潮州市| 固安县| 南通市| 交城县| 富锦市| 武城县| 水城县| 布拖县| 安宁市| 南川市| 普兰县| 甘孜县| 从江县| 台南市| 泸西县| 申扎县| 通许县| 嘉定区| 阜平县| 卢龙县| 潼南县| 广灵县| 同德县| 萝北县| 武功县| 杨浦区| 巫山县| 潼关县| 温泉县|