java 中死鎖問題的實(shí)例詳解

在秀山土家族苗族等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需制作網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),秀山土家族苗族網(wǎng)站建設(shè)費(fèi)用合理。
先看代碼在做解釋
public class DeadLock implements Runnable{
String a;
String b;
boolean flag;
public DeadLock(String a,String b,boolean flag){
this.a=a;
this.b=b;
this.flag=flag;
}
public void run(){
if(flag){
// while(true){
synchronized(a){
System.out.println("鎖a");
synchronized(b){
System.out.println("鎖b----");
}
}
// }
}else{
// while(true){
synchronized(b){
System.out.println("鎖b");
synchronized(a){
System.out.println("鎖a----");
}
}
// }
}
}
public static void main(String[] args){
String a=new String("a");
String b=new String("b");
DeadLock d1=new DeadLock(a,b,true);
DeadLock d2=new DeadLock(a,b,false);
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
System.out.println("歡聲笑語中打出GG");
}
}
以上是代碼部分,如果沒有死鎖,可以在if下加while(true),必然死鎖,下面來做說明。
這個僅僅是為了理解死鎖和面試用的,創(chuàng)建兩個對象a和b只是為了作為死鎖的對象而用,線程t1運(yùn)行(t1.start()),線程t1拿到鎖a后,需要繼續(xù)執(zhí)行,拿到鎖b,而線程t2運(yùn)行(t2.start()),拿到鎖b,想繼續(xù)拿到鎖a繼續(xù)執(zhí)行,這就形成死鎖,互相持有對面所需要的鎖對象。
如果面試,可以簡單記下,兩個線程,兩個鎖對象,鎖互相嵌套,最少兩種狀態(tài),同時執(zhí)行,一次不行就多次,也可鎖外面加循環(huán),讓線程多次運(yùn)行,就會死鎖,因?yàn)檫\(yùn)行一次,可能存在偶然,第一個線程執(zhí)行完了,鎖對象釋放了,第二個線程才進(jìn)來執(zhí)行,如此就有偶然現(xiàn)象。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
網(wǎng)頁題目:java中死鎖問題的實(shí)例詳解
本文地址:http://chinadenli.net/article8/gdioop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、企業(yè)網(wǎng)站制作、網(wǎng)站策劃、搜索引擎優(yōu)化、網(wǎng)站營銷、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)