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

當(dāng)前位置:首頁 > 科技  > 軟件

Synchronized關(guān)鍵字的底層原理?

來源: 責(zé)編: 時(shí)間:2024-03-18 09:39:23 252觀看
導(dǎo)讀1. synchronized的基本使用在現(xiàn)實(shí)場(chǎng)景中,搶票代碼,如果不加鎖,就會(huì)出現(xiàn)超賣或者一張票賣給多個(gè)人Synchronized對(duì)象鎖采用互斥的方式讓同一時(shí)刻至多只有一個(gè)線程能持有對(duì)象鎖,其它線程再想獲取這個(gè)對(duì)象鎖時(shí)就會(huì)阻塞住,代碼

1. synchronized的基本使用

在現(xiàn)實(shí)場(chǎng)景中,搶票代碼,如果不加鎖,就會(huì)出現(xiàn)超賣或者一張票賣給多個(gè)人cgd28資訊網(wǎng)——每日最新資訊28at.com

Synchronized對(duì)象鎖采用互斥的方式讓同一時(shí)刻至多只有一個(gè)線程能持有對(duì)象鎖,其它線程再想獲取這個(gè)對(duì)象鎖時(shí)就會(huì)阻塞住,代碼如下cgd28資訊網(wǎng)——每日最新資訊28at.com

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

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

特別說明:synchronized 關(guān)鍵字的底層實(shí)現(xiàn)涉及到 Java 虛擬機(jī)中的監(jiān)視器(Monitor)機(jī)制。每個(gè) Java 對(duì)象都與一個(gè) Monitor 相關(guān)聯(lián),Monitor 負(fù)責(zé)對(duì)象的鎖定和解鎖,以及線程的阻塞和喚醒。cgd28資訊網(wǎng)——每日最新資訊28at.com

2. Monitor

Monitor 被翻譯為監(jiān)視器,是由jvm提供,c++語言實(shí)現(xiàn)cgd28資訊網(wǎng)——每日最新資訊28at.com

使用一下簡(jiǎn)單代碼中查看monitor,通過javap命令查看clsss的字節(jié)碼cgd28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

思考:為什么會(huì)出現(xiàn)兩個(gè)monitorexitcgd28資訊網(wǎng)——每日最新資訊28at.com

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

monitor主要就是跟這個(gè)對(duì)象產(chǎn)生關(guān)聯(lián),如下圖cgd28資訊網(wǎng)——每日最新資訊28at.com

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

Monitor內(nèi)部具體的存儲(chǔ)結(jié)構(gòu):cgd28資訊網(wǎng)——每日最新資訊28at.com

  • Owner:存儲(chǔ)當(dāng)前獲取鎖的線程的,只能有一個(gè)線程可以獲取
  • EntryList:關(guān)聯(lián)沒有搶到鎖的線程,處于Blocked狀態(tài)的線程
  • WaitSet:關(guān)聯(lián)調(diào)用了wait方法的線程,處于Waiting狀態(tài)的線程

具體的流程:cgd28資訊網(wǎng)——每日最新資訊28at.com

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

3.面試題

面試官:synchronized關(guān)鍵字的底層原理?cgd28資訊網(wǎng)——每日最新資訊28at.com

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

本文鏈接:http://m.www897cc.com/showinfo-26-76499-0.htmlSynchronized關(guān)鍵字的底層原理?

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

上一篇: 記一次 .NET某設(shè)備監(jiān)控自動(dòng)化系統(tǒng) CPU爆高分析

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

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
中日韩美女免费视频网址在线观看 | 久久久美女艺术照精彩视频福利播放| aⅴ色国产欧美| 中文日韩在线视频| 国产精品稀缺呦系列在线| 欧美日韩一区在线播放| 国产精品私人影院| 伊人伊人伊人久久| 日韩视频一区| 欧美一级成年大片在线观看| 久久亚洲春色中文字幕久久久| 欧美韩日一区二区| 国产精品久久久久久久久婷婷| 激情久久综合| 亚洲天堂av综合网| 久久精品女人天堂| 欧美日韩一区二区视频在线| 国产日韩欧美一区二区三区四区 | 亚洲国产成人av好男人在线观看| 9人人澡人人爽人人精品| 性欧美在线看片a免费观看| 麻豆精品在线视频| 国产精品人人做人人爽 | 一区二区三区黄色| 久久精品视频在线看| 欧美日韩亚洲成人| 黄色成人91| 中日韩男男gay无套| 久久综合中文色婷婷| 欧美色大人视频| 极品尤物久久久av免费看| 日韩午夜激情| 久久男人av资源网站| 欧美系列精品| 亚洲国产精品福利| 亚洲欧美在线一区二区| 你懂的国产精品| 国产一区二区三区四区| 9i看片成人免费高清| 久久久人人人| 国产女主播一区二区三区| 最新高清无码专区| 欧美在线网址| 国产精品九九久久久久久久| 亚洲电影免费观看高清完整版| 午夜精品久久久久久久久久久久久 | 国产精品一区在线观看| 亚洲精品久久久久久久久久久久久| 欧美伊人久久久久久午夜久久久久 | 久久视频国产精品免费视频在线| 国产精品久在线观看| 亚洲精品少妇30p| 久久综合九色综合网站| 国产深夜精品| 亚洲欧美电影在线观看| 欧美另类videos死尸| 亚洲丰满在线| 久久久国产精品一区二区中文| 国产精品拍天天在线| 99热这里只有精品8| 欧美国产精品v| 亚洲东热激情| 久久亚洲欧美| 韩国av一区| 久久国产日本精品| 国产日韩欧美日韩大片| 亚洲欧美日韩国产一区二区| 欧美色大人视频| 亚洲图片你懂的| 欧美色精品天天在线观看视频| 亚洲精品久久久久中文字幕欢迎你 | 欧美有码视频| 国产麻豆午夜三级精品| 亚洲一区二区三区在线| 欧美日韩日本视频| 夜夜精品视频一区二区| 欧美日韩国产在线播放网站| 亚洲免费大片| 欧美日韩日韩| 中文av一区二区| 国产精品九九久久久久久久| 亚洲一区成人| 国产精品午夜在线| 久久电影一区| 国产一区二区高清视频| 欧美一级一区| 国产综合激情| 久久久久欧美精品| 怡红院精品视频| 麻豆精品一区二区av白丝在线| 影音先锋久久| 欧美a级一区二区| 亚洲精品久久久蜜桃| 欧美日本在线| 亚洲视频你懂的| 国产精品揄拍一区二区| 欧美在线视频a| 在线成人av| 欧美护士18xxxxhd| 99热免费精品在线观看| 国产精品久久久久久久电影| 午夜欧美精品久久久久久久| 国产一区二区成人| 蜜乳av另类精品一区二区| 亚洲黄色性网站| 欧美日韩一区综合| 午夜亚洲精品| 怡红院精品视频在线观看极品| 美脚丝袜一区二区三区在线观看 | 黄色在线一区| 欧美华人在线视频| 亚洲午夜视频在线| 国产一区二区三区黄| 免费观看在线综合色| 99视频一区| 国产伦精品一区二区三区在线观看 | 免费成人在线观看视频| 日韩亚洲欧美在线观看| 国产精品网站在线观看| 久久久精品tv| 亚洲免费不卡| 国产午夜亚洲精品不卡| 欧美承认网站| 亚洲免费在线看| 影视先锋久久| 欧美三级日本三级少妇99| 久久精品国产久精国产思思| 亚洲国产日韩一区| 国产精品理论片| 老巨人导航500精品| 99精品国产一区二区青青牛奶| 国产精品影片在线观看| 毛片基地黄久久久久久天堂| 中国成人亚色综合网站| 好看的av在线不卡观看| 欧美日韩一区二区在线| 久久久高清一区二区三区| 一区二区日本视频| 精品1区2区| 国产精品第2页| 美女任你摸久久| 亚洲欧美国产另类| 91久久久亚洲精品| 国产日韩欧美一二三区| 欧美激情一区二区三区 | 欧美日韩第一区| 久久精品系列| 在线一区视频| 亚洲国产精品久久久久秋霞蜜臀 | 最新中文字幕亚洲| 国产日韩av在线播放| 欧美人交a欧美精品| 久久久久久久久久久久久久一区| 一区二区三区四区五区视频| 黄色成人在线| 国产精品资源在线观看| 欧美大片在线观看一区二区| 亚洲欧美日韩视频一区| 亚洲精品日韩在线观看| 国产综合av| 国产精品久久久久久五月尺| 欧美电影电视剧在线观看| 欧美在线一级视频| 亚洲深夜影院| 91久久精品国产91久久性色tv| 国产视频丨精品|在线观看| 欧美日韩国产在线看| 免费欧美网站| 久久精品视频网| 亚洲欧美综合精品久久成人| 亚洲免费高清视频| 在线免费观看一区二区三区| 国产九九视频一区二区三区| 欧美日韩一区二区三区在线视频| 免费观看日韩av| 久久色中文字幕| 久久久国产一区二区| 午夜免费在线观看精品视频| 亚洲一二三四久久| 日韩亚洲欧美一区二区三区| 亚洲高清精品中出| 国内成人精品2018免费看| 国产精品任我爽爆在线播放| 欧美日韩免费高清| 欧美精品一区二区三区久久久竹菊| 久久综合99re88久久爱| 久久精品国产一区二区三区免费看| 亚洲女与黑人做爰| 亚洲视频图片小说| 一区二区久久久久久| 亚洲美女免费精品视频在线观看| 亚洲电影免费在线观看| 在线精品亚洲| 在线日韩欧美| 亚洲大胆视频| 亚洲大胆人体在线| 亚洲电影在线免费观看| 亚洲国产成人一区| 亚洲国产欧美不卡在线观看| 亚洲高清激情| 亚洲精品乱码久久久久久蜜桃91 | 最新日韩在线| 亚洲精品裸体| 亚洲免费电影在线|