Java 線程死鎖的問題解決辦法
更新時間:2017年09月25日 14:58:34 作者:Lovnx
這篇文章主要介紹了 Java 線程死鎖的問題解決辦法的相關資料,希望通過本大家能幫助到大家,遇到類似問題能夠解決,需要的朋友可以參考下
Java 線程死鎖的問題解決辦法
【線程死鎖】
原因:兩個線程相互等待被對方鎖定的資源
代碼模擬:
public class DeadLock {
public static void main(String[] args) {
Object obj = new Object();
Object obj1 = new Object();
DeadLockThread1 D1 = new DeadLockThread1(obj, obj1);
DeadLockThread2 D2 = new DeadLockThread2(obj, obj1);
new Thread(D1,"線程1").start();
new Thread(D2,"線程2").start();
}
}
class DeadLockThread1 implements Runnable {
private Object obj;
private Object obj1;
public DeadLockThread1(Object obj, Object obj1) {
this.obj = obj;
this.obj1 = obj1;
}
@Override
public void run() {
synchronized (obj) { //DeadLockThread1鎖定obj對象
try {
Thread.sleep(1000);
synchronized (obj1) { //等待鎖定obj1對象,obj對象已被DeadLockThread2鎖定
obj1.getClass();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class DeadLockThread2 implements Runnable {
private Object obj;
private Object obj1;
public DeadLockThread2(Object obj, Object obj1) {
this.obj = obj;
this.obj1 = obj1;
}
@Override
public void run() {
synchronized (obj1) { //DeadLockThread2鎖定obj2對象
try {
Thread.sleep(1000);
synchronized (obj) { //等待鎖定obj對象,obj對象已被DeadLockThread1鎖定
obj.getClass();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
查看方式:
1、【cmd】下輸入【jconsole】

2、選擇測試線程并點擊右下角【連接】,左上角選擇【線程】,左下角選擇【檢測死鎖】

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對本站的支持!
相關文章
springcloud干貨之服務注冊與發(fā)現(xiàn)(Eureka)
這篇文章主要介紹了springcloud干貨之服務注冊與發(fā)現(xiàn)(Eureka) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
深入理解Java8新特性之接口中的默認方法和靜態(tài)方法
從Java8開始,程序允許在接口中包含帶有具體實現(xiàn)的方法,使用default修飾,這類方法就是默認方法。默認方法在接口中可以添加多個,并且Java8提供了很多對應的接口默認方法,接下來讓我們一起來看看吧2021-11-11
Spring Cloud使用Feign實現(xiàn)Form表單提交的示例
本篇文章主要介紹了Spring Cloud使用Feign實現(xiàn)Form表單提交的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
java為什么會出現(xiàn)精度丟失這種現(xiàn)象你知道嗎
這篇文章主要介紹了Java精度丟失的問題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下,希望能夠給你帶來幫助2021-08-08

