大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java死鎖的排查和解決,Java項目實戰視頻

Java死鎖的排查和解決,Java項目實戰視頻

更新時間:2020-04-13 15:42:16 來源:動力節點 瀏覽2092次


  相信程序員都會碰上這樣的問題,Java死鎖如何排查?又如何解決呢?那么,何為死鎖呢?死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象。今天小編一次性來幫助大家解決Java死鎖的有關問題。


Java死鎖的排查和解決,Java項目實戰視頻


  1、為什么會出現死鎖?


  要解決Java死鎖就必須追根究底,為什么會出現死鎖?其實從死鎖的定義就可以看出來,一方面是因為有兩個或者兩個以上進程,另一方面是因為有競爭資源。


  2、怎么排查代碼中出現了死鎖?


  (1)使用 jps + jstack


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


  使用 jstack -l 12316


  (2)使用jconsole


  在window打開 JConsole,JConsole是一個圖形化的監控工具!


  在windons命令窗口 ,輸出JConsole


  選擇到線程的tab上


  (3)使用Java Visual VM


  在window打開 jvisualvm,jvisualvm是一個圖形化的監控工具!


  在windons命令窗口 ,輸出 jvisualvm


  依然是切換到線程這個TAB上,很明顯的就有提示!


  3、如何避免死鎖?


  上面說了死鎖出現的原因以及通過三種方式來檢測和排查死鎖,下面更重要的東西來了,就是如何避免死鎖,如果能夠讓寫出的代碼避免死鎖出現也就沒有上面這些排查的過程了。最好的是從源頭控制問題,而不是后期遇到問題在去填坑。


  我看了阿里巴巴中最新的開發規約,里面有對避免死鎖的說明,具體如下:


  死鎖的原因就是兩個線程試圖以不同的順序來獲得相同的鎖。所以,如果所有的線程以固定的順序來獲得鎖,那么在程序中就不會出現鎖順序死鎖的問題。


  (1)動態的鎖順序死鎖


  以一個經典的轉賬案例來進行說明,我們知道轉賬就是將資金從一個賬戶轉入另一個賬戶。在開始轉賬之前,首先需要獲得這兩個賬戶對象得鎖,以確保通過原子方式來更新兩個賬戶中的余額,同時又不破壞一些不變形條件,例如 賬戶的余額不能為負數。


  結論:由于我們無法控制transferMoney中的參數的順序,而這些參數順序取決于外部的輸入。所以兩個線程同時調用transferMoney,一個線程從X向Y轉賬,另一個線程從Y向X轉賬,那么就會發生互相等待鎖的情況,導致死鎖。


  解決問題方案:定義鎖的順序,并且整個應用中都按照這個順序來獲取鎖。


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


  方案二:在Account中包含一個唯一的,不可變的,值。比如說賬號等。通過對這個值對對象進行排序。


  (2)在協作對象之間發生的死鎖


  如果在持有鎖時調用某外部的方法,那么將出現活躍性問題。在這個外部方法中可能會獲取其他的鎖(這個可能產生死鎖),或阻塞時間過長,導致其他線程無法及時獲得當前持有的鎖。


  場景如下:Taxi代表出租車對象,包含當前位置和目的地。Dispatcher代表車隊。當一個線程收到GPS更新事件時掉用setLocation,那么它首先更新出租車的位置,然后判斷它是否到達目的地。如果已經到達,它會通知Dispatcher:它需要一個新的目的地。因為setLocation和notifyAvailable都是同步方法,因此掉用setLocation線程首先獲取taxi的鎖,然后在獲取Dispatcher的鎖。同樣,掉用getImage的線程首先獲取Dispatcher的鎖,再獲取每一個taxi的鎖,這兩個線程按照不同的順序來獲取鎖,因此可能導致死鎖。


  解決方案:使用開放掉用。如果再調用某個方法時不需要持有鎖,那么這種調用就被稱為開放掉用。這種調用能有效的避免死鎖,并且易于分析線程安全。


Java死鎖的排查和解決,Java項目實戰視頻


  以上就是動力節點java培訓機構的小編針對“Java死鎖的排查和解決,Java項目實戰視頻”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久免费激情视频 | 国产永久一区二区三区 | japanese55成熟丰满熟 | 久久国产热这里只有精品8 久久国产三级 | 男人的私人影院 | 91久久精品一区二区三区 | 四虎影视在线观看2022a | 国产男女在线观看 | 动漫美女撒尿 | 国产日产精品_国产精品毛片 | 亚洲精品一区二区三区国产 | 99色影院| 男人的天堂免费视频 | 嘿咻嘿咻免费区在线观看吃奶 | 91福利国产在线观看 | 久久久国产精品va麻豆 | 在线免费观看一区二区三区 | 日韩成人精品 | 国产一级特黄aa毛片 | 色丁香六月| 国产 日韩 欧美 亚洲 | 国产伦人伦偷精品视频 | 九九国产精品视频 | 日韩视频在线观看一区 | 亚洲欧美综合在线观看 | 亚洲第一se情网站 | 精品国产品香蕉在线观看 | 久久99精品九九九久久婷婷 | 999在线观看视频 | 国产精品国产三级国产无毒 | 精品福利 | 真实偷拍激情啪啪对白 | 欧美视频一区二区三区 | 国产精品亚洲综合一区 | 亚洲va天堂va欧美ⅴa | 黄色在线观看www | 成人久久伊人精品伊人 | 7777精品伊人久久久大香线蕉 | 日本欧美在线视频 | 中国一级特黄特级毛片 | 久热中文字幕在线观看 |