黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線(xiàn):400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Javaweb項(xiàng)目案例視頻之死鎖的排查和解決

Javaweb項(xiàng)目案例視頻之死鎖的排查和解決

更新時(shí)間:2020-05-26 15:48:58 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3147次

相信程序員都會(huì)碰上這樣的問(wèn)題,Java死鎖如何排查?又如何解決呢?那么,何為死鎖呢?死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象。今天小編一次性來(lái)幫助大家解決Java死鎖的有關(guān)問(wèn)題。

Javaweb項(xiàng)目案例視頻之死鎖的排查和解決

1.為什么會(huì)出現(xiàn)死鎖?

要解決Java死鎖就必須追根究底,為什么會(huì)出現(xiàn)死鎖?其實(shí)從死鎖的定義就可以看出來(lái),一方面是因?yàn)橛袃蓚€(gè)或者兩個(gè)以上進(jìn)程,另一方面是因?yàn)橛懈?jìng)爭(zhēng)資源。

2.怎么排查代碼中出現(xiàn)了死鎖?

(1)使用jps+jstack

在windons命令窗口,使用jps-l

使用jstack-l 12316

(2)使用jconsole

在window打開(kāi)JConsole,JConsole是一個(gè)圖形化的監(jiān)控工具!

在windons命令窗口,輸出JConsole

選擇到線(xiàn)程的tab上

(3)使用Java Visual VM

在window打開(kāi)jvisualvm,jvisualvm是一個(gè)圖形化的監(jiān)控工具!

在windons命令窗口,輸出jvisualvm

依然是切換到線(xiàn)程這個(gè)TAB上,很明顯的就有提示!

3.如何避免死鎖?

上面說(shuō)了死鎖出現(xiàn)的原因以及通過(guò)三種方式來(lái)檢測(cè)和排查死鎖,下面更重要的東西來(lái)了,就是如何避免死鎖,如果能夠讓寫(xiě)出的代碼避免死鎖出現(xiàn)也就沒(méi)有上面這些排查的過(guò)程了。最好的是從源頭控制問(wèn)題,而不是后期遇到問(wèn)題在去填坑。

我看了阿里巴巴中最新的開(kāi)發(fā)規(guī)約,里面有對(duì)避免死鎖的說(shuō)明,具體如下:

死鎖的原因就是兩個(gè)線(xiàn)程試圖以不同的順序來(lái)獲得相同的鎖。所以,如果所有的線(xiàn)程以固定的順序來(lái)獲得鎖,那么在程序中就不會(huì)出現(xiàn)鎖順序死鎖的問(wèn)題。

(1)動(dòng)態(tài)的鎖順序死鎖

以一個(gè)經(jīng)典的轉(zhuǎn)賬案例來(lái)進(jìn)行說(shuō)明,我們知道轉(zhuǎn)賬就是將資金從一個(gè)賬戶(hù)轉(zhuǎn)入另一個(gè)賬戶(hù)。在開(kāi)始轉(zhuǎn)賬之前,首先需要獲得這兩個(gè)賬戶(hù)對(duì)象得鎖,以確保通過(guò)原子方式來(lái)更新兩個(gè)賬戶(hù)中的余額,同時(shí)又不破壞一些不變形條件,例如賬戶(hù)的余額不能為負(fù)數(shù)。

結(jié)論:由于我們無(wú)法控制transferMoney中的參數(shù)的順序,而這些參數(shù)順序取決于外部的輸入。所以?xún)蓚€(gè)線(xiàn)程同時(shí)調(diào)用transferMoney,一個(gè)線(xiàn)程從X向Y轉(zhuǎn)賬,另一個(gè)線(xiàn)程從Y向X轉(zhuǎn)賬,那么就會(huì)發(fā)生互相等待鎖的情況,導(dǎo)致死鎖。

解決問(wèn)題方案:定義鎖的順序,并且整個(gè)應(yīng)用中都按照這個(gè)順序來(lái)獲取鎖。

方案一:使用System.identityHashCode方法,該方法返回有Object.hashCode返回的值,此時(shí)可以通過(guò)某種任意方法來(lái)決定鎖的順序。但是在極少數(shù)情況下,兩個(gè)對(duì)象可能擁有相同的散列值,在這種情況下,通過(guò)給公共變量加鎖來(lái)實(shí)現(xiàn)給鎖制定順序。所以這種方法也是用最小的代價(jià),換來(lái)了最大的安全性。

方案二:在Account中包含一個(gè)唯一的,不可變的,值。比如說(shuō)賬號(hào)等。通過(guò)對(duì)這個(gè)值對(duì)對(duì)象進(jìn)行排序。

(2)在協(xié)作對(duì)象之間發(fā)生的死鎖

如果在持有鎖時(shí)調(diào)用某外部的方法,那么將出現(xiàn)活躍性問(wèn)題。在這個(gè)外部方法中可能會(huì)獲取其他的鎖(這個(gè)可能產(chǎn)生死鎖),或阻塞時(shí)間過(guò)長(zhǎng),導(dǎo)致其他線(xiàn)程無(wú)法及時(shí)獲得當(dāng)前持有的鎖。

場(chǎng)景如下:Taxi代表出租車(chē)對(duì)象,包含當(dāng)前位置和目的地。Dispatcher代表車(chē)隊(duì)。當(dāng)一個(gè)線(xiàn)程收到GPS更新事件時(shí)掉用setLocation,那么它首先更新出租車(chē)的位置,然后判斷它是否到達(dá)目的地。如果已經(jīng)到達(dá),它會(huì)通知Dispatcher:它需要一個(gè)新的目的地。因?yàn)閟etLocation和notifyAvailable都是同步方法,因此掉用setLocation線(xiàn)程首先獲取taxi的鎖,然后在獲取Dispatcher的鎖。同樣,掉用getImage的線(xiàn)程首先獲取Dispatcher的鎖,再獲取每一個(gè)taxi的鎖,這兩個(gè)線(xiàn)程按照不同的順序來(lái)獲取鎖,因此可能導(dǎo)致死鎖。

解決方案:使用開(kāi)放掉用。如果再調(diào)用某個(gè)方法時(shí)不需要持有鎖,那么這種調(diào)用就被稱(chēng)為開(kāi)放掉用。這種調(diào)用能有效的避免死鎖,并且易于分析線(xiàn)程安全。

Javaweb項(xiàng)目案例視頻之死鎖的排查和解決

Javaweb項(xiàng)目相關(guān)視頻教程

MVC架構(gòu):http://m.ilovecolors.com.cn/javavideo/123.html

CRM項(xiàng)目:http://m.ilovecolors.com.cn/javavideo/124.html

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Javaweb項(xiàng)目案例視頻之死鎖的排查和解決”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本a∨网站 | 琪琪色网| 欧美日韩操 | 亚洲阿v天堂2021在线观看 | 91精品综合久久久久久五月天 | 亚洲欧美日韩综合 | 欧美整片sss| 中文字幕亚洲综合久久202 | 宅男在线 午夜影院 | 一个人看的www视频高清免费 | 欧美成人在线免费观看 | 亚洲欧美综合一区二区三区四区 | 91精品成人 | 国内精品免费视频自在线 | 野花影视视频在线观看免费 | 美女黄色免费在线观看 | 噜噜噜噜天天狠狠 | 99视频精品全部国产盗摄视频 | 波多野结衣在线观看一区二区 | 搞黄网站在线观看 | 天天摸夜夜摸夜夜狠狠摸 | 青青综合网| 黄免费视频 | 久久99精品视免费看 | 97青草香蕉依人在线播放 | 666夜色666夜色国产免费看 | 亚洲v天堂v手机在线观看 | 精品一区二区三区在线观看l | 黄色小视频观看 | 欧美不卡激情三级在线观看 | 中国男女全黄大片一级 | 97国产成人精品免费视频 | 久色视频网 | 一卡二卡在线观看 | 黄视频网址 | 九一精品国产 | 欧美首页| 久久婷婷五月综合色丁香 | 国产专区中文字幕 | 亚洲欧美精品一区天堂久久 | 一个人看的www片免费中文 |