目錄
- 1、創建死鎖
- 2、創建執行緒任務類
- 3、測驗結果
- 4、總結
1、創建死鎖
package lao.ben.juc.deadLock;
import org.junit.Test;
//死鎖條件:兩個執行緒互相持有對方想要的鎖,對方又釋放不了,就卡住了,
public class DeadLock {
//方法一
String xiaowang = "xiaownag";
String xiaohong = "xiaohong";
public void together1() throws Exception {
synchronized (xiaowang) {
//執行緒安全問題就是執行緒之間打了個時間差,
//業務代碼執行時間越長,越容易產生執行緒安全問題,
Thread.sleep(100);
synchronized (xiaohong) {
System.out.println("together1執行了");
}
}
}
public void together2() throws Exception {
synchronized (xiaohong) {
Thread.sleep(100);
synchronized (xiaowang) {
System.out.println("together2執行了");
}
}
}
}
2、創建執行緒任務類
package lao.ben.juc.deadLock;
public class Thread1 extends Thread {
private DeadLock deadLock;
public Thread1(DeadLock dl) {
this.deadLock = dl;
}
public void run() {
try {
deadLock.together1();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package lao.ben.juc.deadLock;
public class Thread2 extends Thread {
private DeadLock deadLock;
public Thread2(DeadLock dl) {
this.deadLock = dl;
}
public void run() {
try {
deadLock.together2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、測驗結果
沒有輸出任何東西,
執行緒1在執行業務代碼時,需要執行緒2的鎖,
執行緒2在執行業務代碼時,需要執行緒1的鎖,
犟,

4、總結
在多執行緒環境中,一個執行緒不可避免的會獲取多個鎖,
為了避免死鎖的情況,在使用鎖時,一定要注意使用順序,并減少同步嵌套同步的數量,
Lock介面中這個方法可以設定等待時間,避免兩個執行緒犟勁上來了,你不讓我,我不讓你,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259178.html
標籤:其他
上一篇:Noah Mt4跟單系統
