Java 線程死鎖的問題解決辦法
更新時間:2017年09月25日 14:58:34 作者:Lovnx
這篇文章主要介紹了 Java 線程死鎖的問題解決辦法的相關(guān)資料,希望通過本大家能幫助到大家,遇到類似問題能夠解決,需要的朋友可以參考下
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ū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper實例詳解
這篇文章主要介紹了SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper實例詳解 ,需要的朋友可以參考下2017-09-09
JavaWeb中JavaMail創(chuàng)建郵件和發(fā)送郵件
這篇文章主要介紹了JavaWeb中JavaMail創(chuàng)建郵件和發(fā)送郵件,較為詳細的分析了JavaMail發(fā)送郵件的用法,是非常實用的技巧,需要的朋友可以參考下2015-12-12
Java如何替換RequestBody和RequestParam參數(shù)的屬性
近期由于接手的老項目中存在所有接口中新增一個加密串來給接口做一個加密效果,所以就研究了一下Http請求鏈路,發(fā)現(xiàn)可以通過?javax.servlet.Filter去實現(xiàn),這篇文章主要介紹了Java替換RequestBody和RequestParam參數(shù)的屬性,需要的朋友可以參考下2023-10-10
詳解使用Spring?Data?repository進行數(shù)據(jù)層的訪問問題
這篇文章主要介紹了使用Spring?Data?repository進行數(shù)據(jù)層的訪問,抽象出Spring Data repository是因為在開發(fā)過程中,常常會為了實現(xiàn)不同持久化存儲的數(shù)據(jù)訪問層而寫大量的大同小異的代碼,本文給大家介紹的非常詳細,需要的朋友參考下吧2022-06-06

