日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例

發布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.死鎖代碼

//死鎖:多個線程互相抱著對方需要的資源,然后形成僵局 public class DeadLock {public static void main(String[] args) {Makeup girl1 = new Makeup(0,"灰姑娘");Makeup girl2 = new Makeup(1,"白雪公主");girl1.start();girl2.start();}}//口紅 class Lipstick{}//鏡子 class Mirror{}class Makeup extends Thread{//需要的資源只能有一份,用static來保證只有一份static Lipstick lipstick = new Lipstick();static Mirror mirror = new Mirror();int choice;//選擇String girlName;//使用化妝品的人public Makeup(int choice, String girlName) {this.choice = choice;this.girlName = girlName;}@Overridepublic void run(){try {makeup();//化妝} catch (InterruptedException e) {e.printStackTrace();}}private void makeup() throws InterruptedException {if (choice == 0){synchronized (lipstick){//獲得口紅的鎖System.out.println(this.girlName+"獲得口紅的鎖");Thread.sleep(1000);synchronized (mirror){//一秒鐘后想獲得鏡子System.out.println(this.girlName+"獲取鏡子的鎖");}}}else {synchronized (mirror){//獲得鏡子的鎖System.out.println(this.girlName+"獲得鏡子的鎖");Thread.sleep(2000);synchronized (lipstick){//兩秒鐘后,想獲得口紅System.out.println(this.girlName+"獲取口紅的鎖");}}}} }

關鍵代碼

private void makeup() throws InterruptedException {if (choice == 0){synchronized (lipstick){//獲得口紅的鎖System.out.println(this.girlName+"獲得口紅的鎖");Thread.sleep(1000);synchronized (mirror){//一秒鐘后想獲得鏡子System.out.println(this.girlName+"獲取鏡子的鎖");}}}else {synchronized (mirror){//獲得鏡子的鎖System.out.println(this.girlName+"獲得鏡子的鎖");Thread.sleep(2000);synchronized (lipstick){//兩秒鐘后,想獲得口紅System.out.println(this.girlName+"獲取口紅的鎖");}}}}

上述代碼解析,當一個線程A鎖住口紅不放,同時想拿鏡子
但是鏡子被線程B鎖住,線程B要拿到了口紅才會釋放鏡子
那么線程A就會一直等待線程B釋放鏡子鎖
但是線程B要拿不到口紅鎖就不會釋放鏡子鎖
所以兩個線程互相等待,形成死鎖,程序崩潰
運行結果

2.解決后的代碼

private void makeup() throws InterruptedException {if (choice == 0){synchronized (lipstick){//獲得口紅的鎖System.out.println(this.girlName+"獲得口紅的鎖");Thread.sleep(1000);}synchronized (mirror){//一秒鐘后想獲得鏡子System.out.println(this.girlName+"獲取鏡子的鎖");}}else {synchronized (mirror){//獲得鏡子的鎖System.out.println(this.girlName+"獲得鏡子的鎖");Thread.sleep(2000);}synchronized (lipstick){//兩秒鐘后,想獲得口紅System.out.println(this.girlName+"獲取口紅的鎖");}}}

線程A拿到了口紅鎖,然后釋放了口紅鎖,想拿鏡子鎖
線程B拿到了鏡子鎖,然后釋放了鏡子鎖,再拿口紅鎖
雙方達成共識,不會永久的等待

運行結果

總結

以上是生活随笔為你收集整理的java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99久久久国产 | 自拍视频一区 | 国产福利视频网站 | 免费在线一区二区 | 天堂在线观看中文字幕 | 国产美女福利在线 | 玖玖免费 | 亚洲在线观看一区二区 | 日本大尺度激情做爰hd | 久久天堂网 | 日操操 | 蜜桃视频无码区在线观看 | 最新中文字幕av专区 | 扒开美女内裤狂揉下部 | 色七七视频 | 岛国大片在线观看 | 欧美 日韩 国产 一区二区三区 | 狠狠干一区| 蜜臀av在线免费观看 | 国产黄 | 中文字字幕一区二区三区四区五区 | 国产成人无码性教育视频 | 红桃av| 人人艹人人| 日本三级黄色录像 | 青青草十七色 | 三级在线看中文字幕完整版 | 极品美女高潮 | 孕妇毛片| 夜夜操免费视频 | 中文字幕一区在线观看 | 精品黄色| 国产成人在线视频观看 | 91免费观看视频 | 少妇被又大又粗又爽毛片久久黑人 | 91色区| 超碰在线图片 | 春日野结衣av | 国产视频在 | 亚洲国内自拍 | 射区导航| 深夜福利国产精品 | 欧美精品99| 亚洲免费高清视频 | 72pao成人国产永久免费视频 | 国产区一区二 | 亚洲AV无码阿娇国产精品 | 能看的黄色网址 | 边添小泬边狠狠躁视频 | 国产香蕉一区二区三区 | 亚洲女人18毛片水真多 | 欧美视频观看 | 国产农村妇女精品久久久 | 香蕉视频网页版 | 懂色中文一区二区在线播放 | 欧美性受xxxx黑人xyx性爽 | 国产精品亚洲欧美在线播放 | 亚洲天堂av网 | 欧美久久久久久久 | 日韩欧美二区三区 | 成人国产一区二区三区 | 美女网站免费 | 国产在线精品播放 | 女生毛片 | 黄视频网站在线观看 | 一级淫片a | 人妻在线一区二区三区 | 福利视频二区 | 国产区精品在线 | 亚洲jizzjizz日本少妇 | 久久瑟瑟| 岳奶大又白下面又肥又黑水多 | 91九色蝌蚪porny | 亚洲日本精品一区 | 欧美三级手机在线观看 | 动漫女生光屁股 | www.国产 | 啪啪导航 | 日韩香蕉视频 | 妺妺窝人体色www聚色窝仙踪 | 手机看片1024国产 | 黄色亚洲视频 | 亲子乱对白乱都乱了 | av男女| 男人av资源网| 亚洲精品一区二区三区蜜桃 | xxxwww黄色| 狠狠躁夜夜躁 | 五月婷婷av| 深夜福利91 | 黄色aa级片 | 91大神福利视频 | 97桃色 | 久久看毛片 | 无码黑人精品一区二区 | 日韩123| 大桥未久中文字幕 | 久久亚洲婷婷 | 久久性生活视频 |