AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

Synchronized關鍵字的底層原理?

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

1. synchronized的基本使用

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

Synchronized對象鎖采用互斥的方式讓同一時刻至多只有一個線程能持有對象鎖,其它線程再想獲取這個對象鎖時就會阻塞住,代碼如下XtZ28資訊網——每日最新資訊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鎖,就可以防止超賣XtZ28資訊網——每日最新資訊28at.com

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

2. Monitor

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

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

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

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

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

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

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

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

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

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

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

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

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

3.面試題

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結?,F在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 榮耀Magicbook V 14 2021曙光藍版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現在已經可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top