国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java入門-可重入鎖

這篇具有很好參考價值的文章主要介紹了Java入門-可重入鎖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

可重入鎖

什么是可重入鎖?

當(dāng)線程獲取某個鎖后,還可以繼續(xù)獲取它,可以遞歸調(diào)用,而不會發(fā)生死鎖;

Java入門-可重入鎖,java入門,java,開發(fā)語言,jvm

可重入鎖案例

程序可重入加鎖 A.class,沒有發(fā)生死鎖。

sychronized鎖
package com.wnhz.lock.reentrant;

public class SychronizedDemo {

    class A {
        void a() {

        }
    }

    class B {
        void b() {
        }
    }

    public static void main(String[] args) {
        System.out.println("準(zhǔn)備鎖住class A >>>>");
        synchronized (A.class) {
            System.out.println("鎖住class A--> 成功");
            System.out.println("準(zhǔn)備再次鎖住class A >>>>");
            synchronized (A.class) {
                System.out.println("鎖住class A--> 成功");
            }
            System.out.println("釋放class A");
        }
    }
}

運行結(jié)果

準(zhǔn)備鎖住class A >>>>
鎖住class A--> 成功
準(zhǔn)備再次鎖住class A >>>>
鎖住class A--> 成功
釋放class A
ReentrantLock
package com.wnhz.lock.reentrant;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ReentrantLockDemo {

    private static final Lock lock = new ReentrantLock();
    class A {
        void a() {
        }
    }

    class B {
        void b() {
        }
    }

    public static void main(String[] args) {
        System.out.println("準(zhǔn)備鎖住class A >>>>");
        lock.lock();
        try {
            System.out.println("鎖住class A--> 成功");
            System.out.println("準(zhǔn)備再次鎖住class A >>>>");
            lock.lock();
            try {
                System.out.println("鎖住class A--> 成功");
            } finally {
                System.out.println("釋放第二次鎖住的class A");
            }
        } finally {
            lock.unlock();
            System.out.println("釋放第一次鎖住的Class A對象");
        }
    }
}

運行結(jié)果

準(zhǔn)備鎖住class A >>>>
鎖住class A--> 成功
準(zhǔn)備再次鎖住class A >>>>
鎖住class A--> 成功
釋放第二次鎖住的class A
釋放第一次鎖住的Class A對象

如何保證可重入

當(dāng)一個線程訪問同步塊并獲取鎖時,會在對象頭和棧幀中的鎖記錄里存儲偏向的線程ID,以后該線程在進入和退出同步塊時不需要進行CAS操作來加鎖和解鎖,只需簡單測試一下對象頭的Mark Word里是否存儲著指向當(dāng)前線程的偏向鎖。如果測試成功,表示線程已經(jīng)獲得了鎖。如果測試失敗,則需要再測試一下Mark Word中偏向鎖標(biāo)志是否設(shè)置成1:沒有則CAS競爭;設(shè)置了,則CAS將對象頭偏向鎖指向當(dāng)前線程。再維護一個計數(shù)器,同個線程進入則自增1,離開再減1,直到為0才能釋放。文章來源地址http://www.zghlxwxcb.cn/news/detail-836311.html

到了這里,關(guān)于Java入門-可重入鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • curator實現(xiàn)的zookeeper可重入鎖

    Curator是一個Apache開源的ZooKeeper客戶端庫,它提供了許多高級特性和工具類,用于簡化在分布式環(huán)境中使用ZooKeeper的開發(fā)。其中之一就是可重入鎖。 Curator提供了 InterProcessMutex 類來實現(xiàn)可重入鎖。以下是使用Curator實現(xiàn)ZooKeeper可重入鎖的示例: import org.apache.curator.framework.Curato

    2024年02月15日
    瀏覽(18)
  • Redis分布式可重入鎖實現(xiàn)方案

    在單進程環(huán)境下,要保證一個代碼塊的同步執(zhí)行,直接用 synchronized 或 ReetrantLock 即可。在分布式環(huán)境下,要保證多個節(jié)點的線程對代碼塊的同步訪問,就必須要用到分布式鎖方案。 分布式鎖實現(xiàn)方案有很多,有基于關(guān)系型數(shù)據(jù)庫行鎖實現(xiàn)的;有基于ZooKeeper臨時順序節(jié)

    2024年02月19日
    瀏覽(24)
  • 【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

    【redis】redis分布式鎖(二)可重入鎖+設(shè)計模式

    上一篇鏈接: 【redis】redis分布式鎖(一)手寫分布式鎖1.0~6.0 隱式鎖(即synchronized使用的鎖)默認(rèn)是可重入鎖 synchronized的重入實現(xiàn)機理 顯式鎖也有ReentrantLock這樣的可重入鎖 結(jié)論: 下邊將使用lua腳本的方式,把可重入鎖的案例語句原子化 V1.0版本 藍色部分是重復(fù)的,可

    2024年02月03日
    瀏覽(25)
  • redis — redis cluster集群模式下如何實現(xiàn)批量可重入鎖?

    redis — redis cluster集群模式下如何實現(xiàn)批量可重入鎖?

    一、redis cluster 集群版 在Redis 3.0版本以后,Redis發(fā)布了Redis Cluster。該集群主要支持搞并發(fā)和海量數(shù)據(jù)處理等優(yōu)勢,當(dāng) Redis 在集群模式下運行時,它處理數(shù)據(jù)存儲的方式與作為單個實例運行時不同。這是因為它應(yīng)該準(zhǔn)備好跨多個節(jié)點分發(fā)數(shù)據(jù),從而實現(xiàn)水平可擴展性。具體能力表

    2024年01月21日
    瀏覽(54)
  • 【分布式鎖】06-Zookeeper實現(xiàn)分布式鎖:可重入鎖源碼分析

    前言 前面已經(jīng)講解了Redis的客戶端Redission是怎么實現(xiàn)分布式鎖的,大多都深入到源碼級別。 在分布式系統(tǒng)中,常見的分布式鎖實現(xiàn)方案還有Zookeeper,接下來會深入研究Zookeeper是如何來實現(xiàn)分布式鎖的。 Zookeeper初識 文件系統(tǒng) Zookeeper維護一個類似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu) image.png 每

    2024年02月22日
    瀏覽(19)
  • JavaEE 初階篇-深入了解 CAS 機制與12種鎖的特征(如樂觀鎖和悲觀鎖、輕量級鎖與重量級鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    JavaEE 初階篇-深入了解 CAS 機制與12種鎖的特征(如樂觀鎖和悲觀鎖、輕量級鎖與重量級鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點贊??收藏?評論? 文章目錄 ? ? ? ? 1.0 樂觀鎖與悲觀鎖概述 ? ? ? ? 1.1 悲觀鎖(Pessimistic Locking) ? ? ? ? 1.2 樂觀鎖(Optimistic Locking) ? ? ? ? 1.3 區(qū)別與適用場景 ? ? ? ? 2.0 輕量級鎖與重量級鎖概述 ? ? ? ? 2.1 真正加

    2024年04月16日
    瀏覽(40)
  • 互斥場景重入鎖處理方案

    處理方案一:map+超時重入鎖數(shù)據(jù)結(jié)構(gòu)( 注:該方案并發(fā)時可以獲取到鎖進行操作 ) 核心邏輯模擬--加超時時間 并發(fā)問題結(jié)果數(shù)據(jù) 問題 問題:鎖對象創(chuàng)建并發(fā)問題 處理方案二:map+不超時重入鎖數(shù)據(jù)結(jié)構(gòu)( 注:該方案并發(fā)時可以獲取到鎖進行操作 ) 核心邏輯模擬--不加超時時間 并

    2024年02月10日
    瀏覽(23)
  • ReentrantLock是如何實現(xiàn)可重入性

    1 問題 ReentrantLock是如何實現(xiàn)可重入性的? 并且在進入鎖內(nèi)之前進行了哪些判斷? 2 方法 // Sync繼承于AQS abstract static class Sync extends AbstractQueuedSynchronizer { ?... } // ReentrantLock默認(rèn)是非公平鎖 public ReentrantLock() { ? ? ? ?sync = new NonfairSync(); } // 可以通過向構(gòu)造方法中傳true來實現(xiàn)公

    2024年02月07日
    瀏覽(24)
  • Linux 可重入、異步信號安全和線程安全

    Linux 可重入、異步信號安全和線程安全

    當(dāng)一個被捕獲的信號被一個進程處理時,進程執(zhí)行的普通的指令序列會被一個信號處理器暫時地中斷。它首先執(zhí)行該信號處理程序中的指令。如果從信號處理程序返回(例如沒有調(diào)用exit或longjmp),則繼續(xù)執(zhí)行在捕獲到信號時進程正在執(zhí)行的正常指令序列(這和當(dāng)一個硬件中

    2024年02月11日
    瀏覽(16)
  • 智能合約安全分析,Vyper 重入鎖漏洞全路徑分析

    智能合約安全分析,Vyper 重入鎖漏洞全路徑分析

    7 月 30 日 21:10 至 7 月 31 日 06:00 鏈上發(fā)生大規(guī)模攻擊事件,導(dǎo)致多個 Curve 池的資金損失。漏洞的根源都是由于特定版本的 Vyper 中出現(xiàn)的重入鎖故障。 通過對鏈上交易數(shù)據(jù)初步分析,我們對其攻擊的交易進行整理歸納,并對攻擊流程進一步的分析,由于攻擊涉及多個交易池。

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包