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

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

Synchronized關鍵字的底層原理?

來源: 責編: 時間:2024-03-18 09:39:23 182觀看
導讀1. synchronized的基本使用在現實場景中,搶票代碼,如果不加鎖,就會出現超賣或者一張票賣給多個人Synchronized對象鎖采用互斥的方式讓同一時刻至多只有一個線程能持有對象鎖,其它線程再想獲取這個對象鎖時就會阻塞住,代碼

1. synchronized的基本使用

在現實場景中,搶票代碼,如果不加鎖,就會出現超賣或者一張票賣給多個人i0U28資訊網——每日最新資訊28at.com

Synchronized對象鎖采用互斥的方式讓同一時刻至多只有一個線程能持有對象鎖,其它線程再想獲取這個對象鎖時就會阻塞住,代碼如下i0U28資訊網——每日最新資訊28at.com

public class synchronizedTest {    // 創建一個靜態對象作為鎖    static Object lock = new Object();    // 初始票數    int ticketNum = 20;    // 獲取票的方法,使用 synchronized 修飾確保線程安全    public synchronized void getTicket() {        // 使用當前對象作為鎖        synchronized (this) {            // 如果票數已經為零,則返回            if (ticketNum <= 0) {                return;            }            System.out.println(Thread.currentThread().getName() + "搶到一張票,剩余:" + ticketNum);            // 非原子性操作,扣除一張票            ticketNum--;        }    }    public static void main(String[] args) {        // 創建 synchronizedTest 實例        synchronizedTest synchronizedTest = new synchronizedTest();        // 創建并啟動 20 個線程        for (int i = 0; i < 20; i++) {            // 調用獲取票的方法            new Thread(() -> synchronizedTest.getTicket()).start();        }    }}

通過以上代碼,加synchronized鎖,就可以防止超賣i0U28資訊網——每日最新資訊28at.com

特別說明:synchronized 關鍵字的底層實現涉及到 Java 虛擬機中的監視器(Monitor)機制。每個 Java 對象都與一個 Monitor 相關聯,Monitor 負責對象的鎖定和解鎖,以及線程的阻塞和喚醒。i0U28資訊網——每日最新資訊28at.com

2. Monitor

Monitor 被翻譯為監視器,是由jvm提供,c++語言實現i0U28資訊網——每日最新資訊28at.com

使用一下簡單代碼中查看monitor,通過javap命令查看clsss的字節碼i0U28資訊網——每日最新資訊28at.com

public class MonitorTest {    static final Object lock = new Object();    static int counter = 0;    public static void main(String[] args) {        synchronized (lock) {            counter++;        }    }}

圖片圖片i0U28資訊網——每日最新資訊28at.com

  • monitorenter: 上鎖開始的地方
  • monitorexit:  解鎖的地方
  • 其中被monitorenter和monitorexit包圍住的指令就是上鎖的代碼

思考:為什么會出現兩個monitorexiti0U28資訊網——每日最新資訊28at.com

有兩個monitorexit的原因,第二個monitorexit是為了防止鎖住的代碼拋異常后不能及時釋放鎖在使用了synchornized代碼塊時需要指定一個對象,所以synchornized也被稱為對象鎖i0U28資訊網——每日最新資訊28at.com

monitor主要就是跟這個對象產生關聯,如下圖i0U28資訊網——每日最新資訊28at.com

圖片圖片i0U28資訊網——每日最新資訊28at.com

Monitor內部具體的存儲結構:i0U28資訊網——每日最新資訊28at.com

  • Owner:存儲當前獲取鎖的線程的,只能有一個線程可以獲取
  • EntryList:關聯沒有搶到鎖的線程,處于Blocked狀態的線程
  • WaitSet:關聯調用了wait方法的線程,處于Waiting狀態的線程

具體的流程:i0U28資訊網——每日最新資訊28at.com

  • 代碼進入synchorized代碼塊,先讓lock(對象鎖)關聯的monitor,然后判斷Owner是否有線程持有
  • 如果沒有線程持有,則讓當前線程持有,表示該線程獲取鎖成功
  • 如果有線程持有,則讓當前線程進入entryList進行阻塞,如果Owner持有的線程已經釋放了鎖,在EntryList中的線程去競爭鎖的持有權(非公平)
  • 如果代碼塊中調用了wait()方法,則會進去WaitSet中進行等待

3.面試題

面試官:synchronized關鍵字的底層原理?i0U28資訊網——每日最新資訊28at.com

  • Synchronized【對象鎖】
  • 采用互斥的方式讓同一時刻至多只有一個線程能持有【對象鎖】
  • 它的底層由monitor實現的,monitor是jvm級別的對象( C++實現),線程獲得鎖需要使用對象(鎖)關聯monitor
  • 在monitor內部有三個屬性,分別是owner、entrylist、waitset
  • 其中owner是關聯的獲得鎖的線程,并且只能關聯一個線程;entrylist關聯的是處于阻塞狀態的線程;waitset關聯的是處于Waiting狀態的線程

本文鏈接:http://www.www897cc.com/showinfo-26-76499-0.htmlSynchronized關鍵字的底層原理?

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

上一篇: 記一次 .NET某設備監控自動化系統 CPU爆高分析

下一篇: 深入理解Java淺拷貝與深拷貝

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就&ldquo;胡錫進炒股是否知道認真報道&rdquo;展開討論。有
  • 造車兩年股價跌六成,小米的估值邏輯變了嗎?

    如果從小米官宣造車后的首個交易日起持有小米集團的股票,那么截至2023年上半年最后一個交易日,投資者將浮虧59.16%,同區間的恒生科技指數跌幅為52.78%
  • 華為Mate 60保護殼曝光:碩大后置相機模組 凸起程度有驚喜

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
Top 主站蜘蛛池模板: 井陉县| 云阳县| 临泽县| 临桂县| 乌兰察布市| 灌阳县| 修武县| 德庆县| 忻州市| 冀州市| 鸡东县| 任丘市| 鲁山县| 孝感市| 新巴尔虎左旗| 大石桥市| 中方县| 东宁县| 海林市| 绍兴县| 泾源县| 修武县| 永清县| 铁岭市| 昌江| 五大连池市| 石台县| 新田县| 泰顺县| 克什克腾旗| 宁明县| 牡丹江市| 连云港市| 盐城市| 台安县| 乌兰浩特市| 西乌| 安岳县| 壤塘县| 芦溪县| 台州市|