java 中死鎖問題的實(shí)例詳解
java 中死鎖問題的實(shí)例詳解
先看代碼在做解釋
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),必然死鎖,下面來做說明。
這個(gè)僅僅是為了理解死鎖和面試用的,創(chuàng)建兩個(gè)對(duì)象a和b只是為了作為死鎖的對(duì)象而用,線程t1運(yùn)行(t1.start()),線程t1拿到鎖a后,需要繼續(xù)執(zhí)行,拿到鎖b,而線程t2運(yùn)行(t2.start()),拿到鎖b,想繼續(xù)拿到鎖a繼續(xù)執(zhí)行,這就形成死鎖,互相持有對(duì)面所需要的鎖對(duì)象。
如果面試,可以簡(jiǎn)單記下,兩個(gè)線程,兩個(gè)鎖對(duì)象,鎖互相嵌套,最少兩種狀態(tài),同時(shí)執(zhí)行,一次不行就多次,也可鎖外面加循環(huán),讓線程多次運(yùn)行,就會(huì)死鎖,因?yàn)檫\(yùn)行一次,可能存在偶然,第一個(gè)線程執(zhí)行完了,鎖對(duì)象釋放了,第二個(gè)線程才進(jìn)來執(zhí)行,如此就有偶然現(xiàn)象。
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
GitLab+Jenkins+Maven+Tomcat?實(shí)現(xiàn)自動(dòng)集成、打包、部署
本文主要介紹了GitLab?+?Jenkins?+?Maven?+?Tomcat?實(shí)現(xiàn)自動(dòng)集成、打包、部署,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Spring boot實(shí)現(xiàn)上傳文件到本地服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Spring boot實(shí)現(xiàn)上傳文件到本地服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08一篇文章帶你了解JAVA面對(duì)對(duì)象應(yīng)用
Java是一門面向?qū)ο蟮恼Z言。對(duì)象是Java程序中的基本實(shí)體。除了對(duì)象之外Java程序同樣處理基本數(shù)據(jù)。下面這篇文章主要給大家總結(jié)了關(guān)于Java中面向?qū)ο蟮闹R(shí)點(diǎn),需要的朋友可以參考借鑒,下面來一起看看吧2021-08-08springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能實(shí)例
今天處理Springboot統(tǒng)一異常攔截的時(shí)候,遇到了頁面跳轉(zhuǎn)的問題,這篇文章主要給大家介紹了關(guān)于springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12分享Java8中通過Stream對(duì)列表進(jìn)行去重的實(shí)現(xiàn)
本文主要介紹了分享Java8中通過Stream對(duì)列表進(jìn)行去重的實(shí)現(xiàn),包括兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11