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

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

為什么StampedLock會導致CPU100%?

來源: 責編: 時間:2024-07-19 07:54:40 570觀看
導讀StampedLock 是 Java 8 引入的一種高級的鎖機制,它位于 java.util.concurrent.locks 包中。與傳統的讀寫鎖(ReentrantReadWriteLock)相比,StampedLock 提供了更靈活和更高性能的鎖解決方案,尤其適用于讀操作遠多于寫操作的

0m528資訊網——每日最新資訊28at.com

StampedLock 是 Java 8 引入的一種高級的鎖機制,它位于 java.util.concurrent.locks 包中。與傳統的讀寫鎖(ReentrantReadWriteLock)相比,StampedLock 提供了更靈活和更高性能的鎖解決方案,尤其適用于讀操作遠多于寫操作的場景。0m528資訊網——每日最新資訊28at.com

1.特點展示

相比于 Java 中的其他鎖,StampedLock 具有以下特點:0m528資訊網——每日最新資訊28at.com

  • 讀寫分離:StampedLock 支持讀寫分離,讀鎖和寫鎖可以同時被不同的線程持有,從而提高了并發性能。而 synchronized 和 ReentrantLock 則不支持讀寫分離,讀操作和寫操作會相互阻塞。
  • 樂觀讀:StampedLock 支持樂觀讀,讀操作不會阻塞寫操作,只有在寫操作發生時才會升級為悲觀讀。這種方式適用于讀多寫少的場景,可以提高讀操作的并發性能。而 ReentrantReadWriteLock 則不支持樂觀讀。
  • 不可重入:ReentrantLock 和 synchronized 都是可重入鎖,而 StampedLock 的寫鎖是不可重入的。
  • 性能優勢:StampedLock 在多線程并發中的讀多情況下有更好的性能,因為 StampedLock 獲取樂觀讀鎖時,不需要通過 CAS 操作來設置鎖的狀態,只是簡單地通過測試狀態即可。

2.基本使用

StampedLock 有三種讀寫方法:0m528資訊網——每日最新資訊28at.com

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

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

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

// 創建 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); // 釋放寫鎖}

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

3.注意事項

在使用 StampedLock 時,需要注意以下幾個問題:0m528資訊網——每日最新資訊28at.com

  • 不可重入性:StampedLock 的讀鎖和寫鎖都不支持重入,這意味著一個線程在獲取了鎖之后,不能再次獲取同一個鎖,所以在使用 StampedLock 時,一定要避免嵌套使用。
  • 死鎖問題:使用 StampedLock 時,必須使用與獲取鎖時相同的 stamp 來釋放鎖,否則就會導致釋放鎖失敗,從而導致死鎖問題的發生。
  • CPU 使用率飆升問題:如果 StampedLock 使用不當,具體來說,在 StampedLock 執行 writeLock 或 readLock 阻塞時,如果調用了中斷操作,如 interrupt() 可能會導致 CPU 使用率飆升。這是因為線程接收到了中斷請求,但 StampedLock 并沒有正確處理中斷信號,那么線程可能會陷入無限循環中,試圖從中斷狀態中恢復,這可能會導致 CPU 使用率飆升。

4.CPU 100%問題演示

以下代碼中線程 2 會導致 CPU 100% 的問題,如下代碼所示:0m528資訊網——每日最新資訊28at.com

public void runningTask() throws Exception{    final StampedLock lock = new StampedLock();    Thread thread = new Thread(()->{        // 獲取寫鎖        lock.writeLock();        // 永遠阻塞在此處,不釋放寫鎖        LockSupport.park();    });    thread.start();    // 保證 thread 獲取寫鎖    Thread.sleep(100);    Thread thread2 = new Thread(()->        // 阻塞在悲觀讀鎖        lock.readLock()    );    thread2.start();    // 保證 thread2 阻塞在讀鎖    Thread.sleep(100);    // 中斷線程 thread2,導致 thread2 CPU 飆升    thread2.interrupt();    thread2.join();}

以上代碼中,線程一先獲取到鎖,之后阻塞,并未釋放鎖,而線程二阻塞在 readLock() 讀鎖時,收到了中斷請求 interrupt(),但并未正確處理中斷異常,因此線程會陷入無限循環中,試圖從中斷狀態中恢復,這就會導致 CPU 使用率一直飆升。0m528資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-101702-0.html為什么StampedLock會導致CPU100%?

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

上一篇: 火山引擎 RTC 實時媒體處理平臺的技術實踐

下一篇: 直接把任意網站變為 API 接口?Firecrawl有點牛了!

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數據安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數一數二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯邦通信、信息技術
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 共享單車的故事講到哪了?

    來源丨??素斀浥c共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就“胡錫進炒股是否知道認真報道”展開討論。有
  • 三星折疊屏手機去年銷售近1000萬臺 今年目標定為1500萬

    7月29日消息,三星率先發力可折疊手機市場,在全球市場已經取得了非常亮眼的成績,接下來會進一步鞏固和擴大這一優勢。三星在推出Galaxy Z Flip5和Galax
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發布

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
Top 主站蜘蛛池模板: 深泽县| 灌阳县| 东港市| 徐闻县| 龙里县| 淮安市| 阿城市| 新河县| 宁南县| 宿迁市| 三穗县| 高要市| 肇东市| 永川市| 津南区| 长葛市| 富民县| 高邑县| 左云县| 平度市| 通城县| 九龙坡区| 治县。| 团风县| 韶关市| 泸溪县| 安福县| 新巴尔虎左旗| 龙陵县| 谷城县| 榆树市| 鄂伦春自治旗| 长泰县| 耿马| 余庆县| 大石桥市| 乌什县| 德兴市| 营山县| 望奎县| 余江县|