java多執行緒之死鎖的例子
阿新 • • 發佈:2019-02-09
在java多執行緒編寫程式中特別害怕的一種情況就是死鎖,他會讓程式死在哪裡不在繼續執行下面就來看一個死鎖的例子:
/**
* 死鎖的例子
*/
public class SiSuoTest {
public static void main(String[] args) {
LineTh ta1 = new LineTh(true);
LineTh ta2 = new LineTh(false);
Thread a = new Thread(ta1);
a.setName("a");//給執行緒起名字為a
Thread b = new Thread(ta2);
b.setName("b");//給執行緒起名字為b
a.start();
b.start();
}
}
class Luck {
public final static Object obj1 = new Object();
public final static Object obj2 = new Object();
}
class LineTh implements Runnable {
private boolean flag = false;
LineTh(boolean flage) {
flag = flage;
}
public void run() {
if (flag) {
while (true) {
synchronized (Luck.obj1) {
System.out.println("執行緒:"+Thread.currentThread().getName()+ ".... 獲取if 的 obj1");
synchronized (Luck.obj2) {
System.out.println("執行緒:" +Thread.currentThread().getName() + ".... 獲取if 的 obj2");
}
}
}
} else {
while (true) {
synchronized (Luck.obj2) {
System.out.println("執行緒:"+Thread.currentThread().getName() + ".... 獲取else 的 obj2");
synchronized (Luck.obj1) {
System.out.println("執行緒:"+Thread.currentThread().getName()+ ".... 獲取else 的 obj1");
}
}
}
}
}
}