千鋒教育2023版Java面試寶典Java面試200題(含美團(tuán)、字節(jié)、阿里大廠真

死鎖:
最簡單的案例就是哲學(xué)家吃飯,筷子不夠,導(dǎo)致死鎖:(以這個(gè)問題分析死鎖的四個(gè)條件)
互斥條件:就是說哲學(xué)家獲取了筷子,則另外一個(gè)哲學(xué)家就不能獲取同一支筷子,這里哲學(xué)家相當(dāng)于線程,筷子相當(dāng)于資源,資源在某一時(shí)間點(diǎn),只能被一個(gè)線程占用,所以是互斥;
請(qǐng)求和保持條件: 就是說一個(gè)哲學(xué)家搶到了一支筷子,又發(fā)起了對(duì)另外一支筷子的請(qǐng)求,而我們知道在這個(gè)案例中,實(shí)質(zhì)上每一支筷子都是被一個(gè)哲學(xué)家獲取且未釋放的,所以發(fā)生了阻塞
不可剝奪條件:也就是說筷子只能由哲學(xué)家自己釋放,另外的哲學(xué)家不能搶他的;
環(huán)路等待:這里就是五個(gè)哲學(xué)家圍坐在一張圓桌上,每兩個(gè)哲學(xué)家中間有一支筷子
?
如何防止死鎖:
防止死鎖也要從這四個(gè)原因入手,只要打破其一就好,
打破互斥條件:就是說一個(gè)哲學(xué)家就用一支筷子吃飯,但是這樣不是不現(xiàn)實(shí)是不方便,所以說,一般在程序中不會(huì)這樣考慮;
打破請(qǐng)求和打破保持條件:就是說在吃飯之前每個(gè)哲學(xué)家都去申請(qǐng)筷子,申請(qǐng)到兩支筷子的吃飯,沒申請(qǐng)到的就等待,而且在提交申請(qǐng)之前要釋放已經(jīng)搶到的筷子;
打破不可剝奪條件:就是說一個(gè)哲學(xué)家在搶不到第二只筷子可以將其釋放,這樣就會(huì)有哲學(xué)家可以搶到足夠的筷子吃飯;
打破環(huán)路等待條件:就是說可以將哲學(xué)家進(jìn)行排序,然后將筷子有序分配,這樣就可以有序的進(jìn)行吃飯。