Java編程之多線程死鎖與線程間通信簡單實現(xiàn)代碼-創(chuàng)新互聯(lián)

死鎖定義

目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、敦化網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

死鎖是指兩個或者多個線程被永久阻塞的一種局面,產(chǎn)生的前提是要有兩個或兩個以上的線程,并且來操作兩個或者多個以上的共同資源;我的理解是用兩個線程來舉例,現(xiàn)有線程A和B同時操作兩個共同資源a和b,A操作a的時候上鎖LockA,繼續(xù)執(zhí)行的時候,A還需要LockB進(jìn)行下面的操作,這個時候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");
     }
    }
   }
 }
}

當(dāng)前名稱:Java編程之多線程死鎖與線程間通信簡單實現(xiàn)代碼-創(chuàng)新互聯(lián)
文章鏈接:http://muchs.cn/article14/ddcgge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化Google、搜索引擎優(yōu)化、網(wǎng)站收錄小程序開發(fā)、做網(wǎng)站

廣告

聲明:本網(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)

成都網(wǎng)站建設(shè)