Java檢測(cè)死鎖案例
導(dǎo)致死鎖的程序
package com.study.train; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.FutureTask; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import static java.lang.Thread.yield; public class Main extends Thread{ private Object o1; private Object o2; Main(Object oa,Object ob,String name) { super(name); o1 = oa; o2 = ob; } @Override public void run() { synchronized (o1) { System.out.println("thread: "+Thread.currentThread().getName() + " get lock"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println("two lock is get"); } } } public static void main(String[] args) throws InterruptedException { Object oj1 = new Object(); Object oj2 = new Object(); Main m1 = new Main(oj1,oj2,"thread1"); Main m2 = new Main(oj2,oj1,"thread2"); m1.start(); m2.start(); m1.join(); m2.join(); } }
1.jconsole工具檢測(cè)
2. jsp+jstack
linux上可以先使用top | grep java,查找忙的線程pid,然后拿到該線程id進(jìn)行分析,jstakc pid。
避免死鎖的方法
- 1.盡量避免使用多個(gè)鎖
- 2.如果一定要使用多個(gè)鎖,可以考慮順序獲取鎖,這樣就類似破壞了環(huán)路等待條件
- 3.使用嘗試獲取鎖的方法,如果無(wú)法獲取,就將本身已經(jīng)獲取到的鎖釋放,類似破壞不可剝奪條件。
銀行家算法屬于檢測(cè)是不是會(huì)存在死鎖,這種做法實(shí)際上也是破壞環(huán)路等待條件的發(fā)生。
到此這篇關(guān)于Java檢測(cè)死鎖案例的文章就介紹到這了,更多相關(guān)Java死鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)
下面小編就為大家?guī)?lái)一篇初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10httpclient connect連接請(qǐng)求方法源碼解讀
這篇文章主要為大家介紹了httpclient connect連接請(qǐng)求方法解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能
本文主要介紹了JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式
這篇文章主要介紹了java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12java實(shí)現(xiàn)單機(jī)版五子棋小游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單機(jī)版五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12Spring?IOC容器基于XML外部屬性文件的Bean管理
這篇文章主要為大家介紹了Spring?IOC容器Bean管理XML外部屬性文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05JAVA多線程Thread和Runnable的實(shí)現(xiàn)
java中實(shí)現(xiàn)多線程有兩種方法:一種是繼承Thread類,另一種是實(shí)現(xiàn)Runnable接口。2013-03-03SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法
Redisson是一個(gè)用于Java的Redis客戶端,它提供了在分布式環(huán)境下操作Redis數(shù)據(jù)庫(kù)的簡(jiǎn)單、高效的方式,本文主要介紹了SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03java網(wǎng)絡(luò)編程之識(shí)別示例 獲取主機(jī)網(wǎng)絡(luò)接口列表
一個(gè)客戶端想要發(fā)起一次通信,先決條件就是需要知道運(yùn)行著服務(wù)器端程序的主機(jī)的IP地址是多少。然后我們才能夠通過(guò)這個(gè)地址向服務(wù)器發(fā)送信息。2014-01-01