08 死鎖 產生與解決

2021-10-23 05:26:53 字數 1508 閱讀 3276

1、死鎖

多個執行緒各自占用一些資源,並且相互等待其他執行緒占用的資源才能進行,而導致兩個或多個執行緒都在等待對方釋放資源,所以度停止執行了。

產生的原因:

過多的同步可能造成死鎖

某乙個同步塊同時擁有兩個以上物件的鎖時,就可能發生死鎖問題

死鎖出現的情況:

package com.tsymq.thread.concurrnet;

public

class

deadlock

}class

awmclass

scope8

class

teammember

extends

thread

@override

public

void

run(

)public

void

pickup()

catch

(interruptedexception e)

synchronized

(scope8)}}

else

catch

(interruptedexception e)

synchronized

(awm)}}

}}

awm和8倍鏡都只有1個,一開始五五開拿到awm,蛇哥拿到8倍鏡,1秒鐘後,五五開還想要乙個8倍鏡,而此時8倍鏡還在蛇哥手中,所以只能等待,又過了1秒鐘,蛇哥還想要awm,可是awm還在開哥手中,也只能等待,兩個人互不想讓,形成了死鎖

解決辦法:

不要放在同乙個**塊中,不要鎖套鎖,可避免死鎖發生

package com.tsymq.thread.concurrnet;

public

class

deadlock

}class

awmclass

scope8

class

teammember

extends

thread

@override

public

void

run(

)public

void

pickup()

catch

(interruptedexception e)

// synchronized (scope8)

}synchronized

(scope8)

}else

catch

(interruptedexception e)

// synchronized (awm)

}synchronized

(awm)}}

}

在五五開拿到awm,蛇哥拿到8倍鏡後,1秒鐘後,開哥放棄了awm,想要8倍鏡,但是還在蛇哥手中,所以等待,又1秒鐘後,蛇哥放棄了8倍鏡,想要awm,此時開哥已經放棄了awm,蛇哥拿到了awm,由於蛇哥已經放棄了8倍鏡,所以開哥成功拿到8倍鏡

死鎖的產生與解決

死鎖 所謂死鎖,是指在多道程式系統中,指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。產生死鎖的主要原因有兩個 一是競爭資源 二是多道程式執行時,程序推進順序不合理。1.產生死鎖的四個必要條件 1 互斥條件 指程序對所分配到...

解決產生oracle sql死鎖

1 查詢資料庫死鎖 可以檢視產生死鎖的使用者,死鎖狀態,狀態,產生死鎖的機器和應用程式 2 查詢產生死鎖的語句 select sql text from v sql where hash value in select sql hash value from v session where sid ...

死鎖的產生與預防

在多執行緒中,為了保證執行緒安全,我們會使用互斥鎖,在某些程序或者執行緒中,使用了某些資源,為了完成任務,需要請求某些程序或執行緒所擁有的資源,從而形成了永久性等待狀態 1.互斥條件 乙個資源每次只能被乙個執行流執行 2.請求與保持 乙個資源想要獲取資源時阻塞,不會釋放已有資源 3.不可剝奪條件 乙...