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.不可剝奪條件 乙...