成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

史上最通俗理解的Java死鎖代碼演示

瀏覽:98日期:2022-08-24 16:51:21

死鎖的概念

知識(shí)儲(chǔ)備

對(duì)象鎖:Java一切皆對(duì)象,每個(gè)類都有一個(gè)class文件。由class文件可以new出對(duì)象,我們簡(jiǎn)單認(rèn)識(shí) 下java對(duì)象,對(duì)象有個(gè)對(duì)象頭信息,也就是這個(gè)對(duì)象概述,其中一條信息就是對(duì)象鎖,也就是我們當(dāng)前對(duì)象有沒(méi)有被鎖定,被哪個(gè)引用鎖定。

synchronized:synchronized是java關(guān)鍵詞,如果運(yùn)用到方法上代表我們鎖的是這個(gè)方法,如果我們鎖的代碼塊,代表再這個(gè)代碼塊內(nèi)我們持有這個(gè)鎖,Java Effective也是提倡減小鎖的范圍。我們進(jìn)入同步代碼塊會(huì)加鎖,執(zhí)行完同步代碼塊會(huì)釋放鎖。

死鎖:通俗理解為死掉的鎖。如果沒(méi)有死掉的鎖它的聲明周期是:持有鎖->釋放鎖。死后我們可以理解為持有鎖但是不釋放鎖,也就是我們同步代碼塊沒(méi)有執(zhí)行完?我們只需要分析同步代碼塊的哪里沒(méi)有執(zhí)行就好了,看下面一個(gè)例子

演示死鎖

package com.yang.kuangTeacher;import java.util.concurrent.TimeUnit;/** * @author: fudy * @date: 2020/9/13 下午 12:21 * @Decription: 演示死鎖(內(nèi)容參考B站狂神說(shuō)JAVA) **/public class DeadLock { public static void main(String[] args) { MarkUp markUp0 = new MarkUp('迪麗熱巴',0); MarkUp markUp1 = new MarkUp('楊冪',1); markUp0.start(); markUp1.start(); }}// 口紅類class LipStick {}// 鏡子類class Mirror {}// 化妝類class MarkUp extends Thread { private int choice; private String userName; private static LipStick lipStick = new LipStick(); private static Mirror mirror = new Mirror(); MarkUp(String userName, int choice) { this.userName = userName; this.choice = choice; } @Override public void run() { try { markUP(); } catch (InterruptedException e) { e.printStackTrace(); } } private void markUP() throws InterruptedException { // 如果選擇0方式化妝 if (choice == 0) { // 同步代碼塊的鎖,在同步代碼塊有效 synchronized (lipStick) { System.out.println(userName + '拿到了口紅'); // 拿到口紅后再拿鏡子 TimeUnit.SECONDS.sleep(1); // 程序執(zhí)行此處會(huì)停止 -----------------這里死鎖-----------------------> synchronized (mirror) { System.out.println(userName + '拿到了鏡子'); } } } // 如果選擇1方式化妝 if (choice == 1) { // 同步代碼塊的鎖,在同步代碼塊有效 synchronized (mirror) { System.out.println(userName + '拿到了鏡子'); // 拿到鏡子后再拿口紅 TimeUnit.SECONDS.sleep(1); // 程序執(zhí)行此處會(huì)停止 -----------------這里死鎖-----------------------> synchronized (lipStick) { System.out.println(userName + '拿到了口紅'); } } } }}

我們剛才認(rèn)為,死鎖是由于同步代碼塊沒(méi)有執(zhí)行完,導(dǎo)致不會(huì)釋放鎖,我們分析以上兩個(gè)死鎖的原因。

在線程1方式0化妝中由于我們拿到了口紅鎖后,睡眠一秒鐘(有可能先執(zhí)行線程2) 在線程2方式1化妝中由于我們拿到了鏡子鎖后,睡眠一秒鐘

假如線程1先獲得口紅鎖執(zhí)行完畢,準(zhǔn)備拿鏡子鎖時(shí),發(fā)現(xiàn)鏡子對(duì)象被持有了,所以他會(huì)等待鏡子鎖被釋放。

線程2先執(zhí)行獲得鏡子鎖完畢,準(zhǔn)備拿口紅鎖時(shí),發(fā)現(xiàn)口紅對(duì)象被持有了,所以他會(huì)等待口紅鎖被釋放。

如果我們不關(guān)閉程序,兩個(gè)線程會(huì)一直等待下去。我們可以理解為死鎖,無(wú)法釋放鎖。

解決死鎖

在上述例子中,我們因?yàn)橄胪瑫r(shí)拿到兩個(gè)鎖去做一件事情才會(huì)導(dǎo)致死鎖,按照J(rèn)ava Effective提倡減小鎖的范圍,我們對(duì)問(wèn)題進(jìn)行改進(jìn)。

我們可以拿到口紅鎖后執(zhí)行口紅方法后釋放口紅鎖,想要鏡子鎖再同步代碼塊拿鏡子鎖即可。

package com.yang.kuangTeacher;import java.util.concurrent.TimeUnit;/** * @author: fudy * @date: 2020/9/13 下午 12:21 * @Decription: 演示死鎖(內(nèi)容參考B站狂神說(shuō)JAVA) **/public class DeadLock { public static void main(String[] args) { MarkUp markUp0 = new MarkUp('迪麗熱巴',0); MarkUp markUp1 = new MarkUp('楊冪',1); markUp0.start(); markUp1.start(); }}// 口紅類class LipStick {}// 鏡子類class Mirror {}// 化妝類class MarkUp extends Thread { private int choice; private String userName; private static LipStick lipStick = new LipStick(); private static Mirror mirror = new Mirror(); MarkUp(String userName, int choice) { this.userName = userName; this.choice = choice; } @Override public void run() { try { markUP(); } catch (InterruptedException e) { e.printStackTrace(); } } private void markUP() throws InterruptedException { // 如果選擇0方式化妝 if (choice == 0) { // 同步代碼塊的鎖,在同步代碼塊有效 synchronized (lipStick) { System.out.println(userName + '拿到了口紅'); TimeUnit.SECONDS.sleep(1); } // 拿到口紅后再拿鏡子 ------------------------改進(jìn)--------------------------- synchronized (mirror) { System.out.println(userName + '拿到了鏡子'); } } // 如果選擇1方式化妝 if (choice == 1) { // 同步代碼塊的鎖,在同步代碼塊有效 synchronized (mirror) { System.out.println(userName + '拿到了鏡子'); TimeUnit.SECONDS.sleep(1); } // 拿到鏡子后再拿口紅 ------------------------改進(jìn)--------------------------- synchronized (lipStick) { System.out.println(userName + '拿到了口紅'); } } }}

通過(guò)及時(shí)釋放鎖,也就是縮小同步代碼塊的范圍,我們使用鎖結(jié)束后及時(shí)釋放,這樣是一種解決死鎖的方式,通過(guò)這個(gè)例子我們以后編寫代碼就會(huì)警惕鎖的同步代碼的范圍。

總結(jié)

到此這篇關(guān)于Java死鎖代碼演示的文章就介紹到這了,更多相關(guān)Java死鎖代碼演示內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美午夜片在线观看| 欧美另类专区| 成人高清视频免费观看| 在线观看亚洲精品| 亚洲a一区二区| 国产精品乱看| 一区二区三区精品视频在线| 欧美在线亚洲综合一区| 欧美精品一区二区三区四区| 国产白丝网站精品污在线入口| 欧美日韩国产免费| 日本vs亚洲vs韩国一区三区二区 | 91精品免费观看| 日韩av中文字幕一区二区 | 国产精品视频在线看| www.日本不卡| 欧美成人国产一区二区| 成人听书哪个软件好| 欧美大片拔萝卜| 成人精品国产一区二区4080| 欧美一区二区在线不卡| 国产精品一区2区| 6080午夜不卡| 国产69精品久久99不卡| 日韩精品一区二| 99精品视频在线免费观看| 久久免费国产精品| 91污在线观看| 国产精品欧美一区二区三区| 欧美特黄一区| 亚洲欧洲av在线| 狠狠久久婷婷| 一区二区三区四区不卡在线| 亚洲一区二区三区精品动漫| 婷婷综合另类小说色区| 色网站国产精品| 久久99国产乱子伦精品免费| 在线观看91精品国产麻豆| 国产成人av电影免费在线观看| 精品日韩一区二区| 欧美在线影院| 18欧美亚洲精品| 亚洲欧美久久久久一区二区三区| 三级欧美在线一区| 欧美精品免费视频| 99综合电影在线视频| 国产精品午夜春色av| 亚洲黄色成人| 亚洲3atv精品一区二区三区| 91精品福利在线| 国产精品一区二区三区99 | 水蜜桃久久夜色精品一区的特点| 欧美亚洲国产bt| 风间由美一区二区av101| 久久青草国产手机看片福利盒子| 国产综合色产| 香蕉av福利精品导航| 欧美日韩卡一卡二| 国产成人a级片| 久久久精品欧美丰满| 亚洲福利电影| 日本欧美肥老太交大片| 日韩午夜在线播放| 欧美日韩国产精品一卡| 一区二区三区在线免费观看| 日本高清无吗v一区| 大尺度一区二区| 最新欧美精品一区二区三区| 色噜噜狠狠一区二区三区果冻| 懂色中文一区二区在线播放| 亚洲欧洲一区二区在线播放| 一本大道av一区二区在线播放| 成人在线综合网| 亚洲色图欧美偷拍| 欧亚一区二区三区| 91一区二区三区在线观看| 亚洲最快最全在线视频| 欧美日韩国产精选| 国产精品久久7| 秋霞午夜av一区二区三区| 欧美精品一区视频| 国产视频一区免费看| 激情欧美日韩一区二区| 欧美激情艳妇裸体舞| 色婷婷激情综合| 波多野结衣中文一区| 亚洲午夜电影在线观看| 5858s免费视频成人| 韩日成人在线| 麻豆精品视频在线观看免费| 国产亚洲午夜高清国产拍精品 | 成人黄色av网站在线| 亚洲免费av在线| 欧美一区二区视频在线观看2022 | 国精产品一区一区三区mba桃花| 欧美极品少妇xxxxⅹ高跟鞋| 色一情一乱一乱一91av| 91年精品国产| 日日摸夜夜添夜夜添亚洲女人| 久久久美女艺术照精彩视频福利播放| 男女精品网站| 99国产精品一区| 日韩精品午夜视频| 国产精品欧美综合在线| 欧美日韩情趣电影| 亚洲特级毛片| 国产乱人伦偷精品视频免下载| 亚洲蜜桃精久久久久久久| 日韩一区二区精品| 久久精品日韩欧美| 欧美日本中文| 国产精品一区三区| 亚洲一区二区四区蜜桃| 精品国产伦一区二区三区观看方式 | 国产精品盗摄一区二区三区| 制服.丝袜.亚洲.另类.中文| 国产毛片一区| 91蝌蚪porny| 激情综合网av| 一区二区三区在线免费视频| 久久欧美中文字幕| 欧美日韩美少妇| 久久国产日本精品| 亚洲视频综合| 北条麻妃一区二区三区| 美女在线视频一区| 亚洲精品欧美在线| 久久欧美一区二区| 欧美日本在线一区| 老牛影视一区二区三区| 亚洲欧洲一区二区天堂久久| 99r国产精品| 国产成人在线看| 蜜臀av在线播放一区二区三区| 亚洲色图在线播放| 欧美精品一区二区久久婷婷| 欧美日韩国产一级片| 亚洲欧美日韩精品综合在线观看| 欧美日韩另类丝袜其他| 成人av网在线| 国产成人综合精品三级| 日韩av午夜在线观看| 一区二区三区日韩欧美| 中日韩av电影| 2024国产精品视频| 91精品国产综合久久小美女| 日本道在线观看一区二区| 国产亚洲毛片| 亚洲经典自拍| 欧美日韩一区二区三区在线视频 | 国产日韩一区二区三区在线播放| 欧美一区三区二区在线观看| 成人午夜精品一区二区三区| 麻豆成人久久精品二区三区红| 亚洲观看高清完整版在线观看| 国产精品美女一区二区三区 | 日本韩国一区二区三区| 亚洲免费网站| 91久久国产综合久久蜜月精品| 欧美激情综合| 91网站黄www| 成熟亚洲日本毛茸茸凸凹| 精品一区二区国语对白| 午夜精品123| 午夜欧美2019年伦理| 亚洲一区中文日韩| 亚洲精品日韩一| 亚洲黄一区二区三区| 亚洲视频每日更新| 亚洲视频免费观看| 国产精品麻豆99久久久久久| 国产日韩精品一区二区三区在线| 久久久久久久久伊人| 久久精品一区二区三区不卡| 国产亚洲美州欧州综合国| 国产欧美综合色| 久久久九九九九| 国产肉丝袜一区二区| 国产精品萝li| 最新热久久免费视频| 亚洲免费观看在线观看| 一区二区在线观看不卡| 夜夜嗨av一区二区三区四季av | 视频在线观看一区二区三区| 五月天丁香久久| 日韩精品一二三区| 日日夜夜一区二区| 麻豆国产一区二区| 国产中文字幕一区| 国产成人av福利| 99综合电影在线视频| 午夜精品国产| 激情视频一区二区| 国产精品久久久亚洲一区| 久久久亚洲人| 欧美婷婷六月丁香综合色| 欧美群妇大交群的观看方式| 欧美一区二区三区视频免费| 精品久久一二三区| 国产婷婷色一区二区三区四区|