鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)  網(wǎng)絡(luò)安全/ Java線(xiàn)程死鎖:為何Java不能像數(shù)據(jù)庫(kù)那樣從死鎖中恢復(fù)?

Java線(xiàn)程死鎖:為何Java不能像數(shù)據(jù)庫(kù)那樣從死鎖中恢復(fù)?

問(wèn)題 JVM可否做到和數(shù)據(jù)庫(kù)事務(wù)處理一樣,對(duì)死鎖進(jìn)行處理?如果不可以,那么想知道原因是什么?

拋磚引玉:

《Java并發(fā)編程實(shí)戰(zhàn)》中描述順序死鎖現(xiàn)象,提到哲學(xué)家進(jìn)餐問(wèn)題,數(shù)據(jù)庫(kù)事務(wù)在順序死鎖發(fā)生時(shí)會(huì)選擇一個(gè)犧牲者釋放資源并可以重新執(zhí)行,此時(shí)事務(wù)可正常完成。
由此想到,JVM可否在死鎖發(fā)生時(shí),找到犧牲者釋放資源?如果在JVM層面能夠完成死鎖避免,多線(xiàn)程編程是否會(huì)簡(jiǎn)單很多?

重申一下,問(wèn)題是JVM可否做到和數(shù)據(jù)庫(kù)事務(wù)處理一樣,對(duì)死鎖進(jìn)行處理?如果不可以,那么想知道原因是什么?

回答
編輯回答
編輯回答
咕嚕嚕

死鎖避免最多是lock()方法在將會(huì)導(dǎo)致死鎖時(shí)拋出一個(gè)exception。這使多線(xiàn)程編程更復(fù)雜了吧?想象每個(gè)lock()方法都有可能exception的情況。。所以PLSQL也挺難寫(xiě)的,PLSQL就是會(huì)遇到這種死鎖導(dǎo)致的exception,然后總是要想辦法處理。

2017年11月27日 15:59