死鎖定義

死鎖是指兩個或者多個線程被永久阻塞的一種局面,產生的前提是要有兩個或兩個以上的線程,并且來操作兩個或者多個以上的共同資源;我的理解是用兩個線程來舉例,現有線程A和B同時操作兩個共同資源a和b,A操作a的時候上鎖LockA,繼續執行的時候,A還需要LockB進行下面的操作,這個時候b資源在被B線程操作,剛好被上了鎖LockB,假如此時線程B剛好釋放了LockB則沒有問題,但沒有釋放LockB鎖的時候,線程A和B形成了對LockB鎖資源的爭奪,從而造成阻塞,形成死鎖;具體其死鎖代碼如下:
public class MyDeadLockTest {
public static void main(String[] args){
Object obj1 = new Object();
Thread thread1 = new Thread(new DeadRes(true,obj1));
Thread thread2 = new Thread(new DeadRes(false,obj1));
thread1.start();
thread2.start();
}
}
class DeadRes implements Runnable{
boolean flag;
Object obj;
public DeadRes(boolean flag, Object obj1) {
this.flag = flag;
this.obj = obj1;
}
@Override
public void run() {
if(flag){
synchronized (DeadRes.class){
System.out.println(Thread.currentThread().getName()+" acquie lock is DeadRes.class");
synchronized (obj){
System.out.println(Thread.currentThread().getName()+" acquie lock is obj");
}
}
}else{
synchronized (obj){
System.out.println(Thread.currentThread().getName()+" acquie lock is obj");
synchronized (DeadRes.class){
System.out.println(Thread.currentThread().getName()+" acquie lock is DeadRes.class");
}
}
}
}
}
當前名稱:Java編程之多線程死鎖與線程間通信簡單實現代碼-創新互聯
文章鏈接:http://www.yijiale78.com/article14/ddcgge.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、Google、搜索引擎優化、網站收錄、小程序開發、做網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯