死鎖
死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。
1、定義兩個鎖
public class MyLock {
public static final Object LOCKA = new Object();
public static final Object LOCKB = new Object();
}
2、編寫死鎖代碼
public class DieLock extends Thread {
private boolean flag;
public DieLock() {
super();
}
public DieLock(boolean flag) {
super();
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (MyLock.LOCKA) {
System.out.println("if中的LOCKA");
synchronized (MyLock.LOCKB) {
System.out.println("if中的LOCKB");
}
}
}else {
synchronized (MyLock.LOCKB) {
System.out.println("else中的LOCKB");
synchronized (MyLock.LOCKA) {
System.out.println("else中的LOCKA");
}
}
}
}
}
3、測試
public class Test {
public static void main(String[] args) {
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);
dl1.start();
dl2.start();
}
}
運行結果:
從運行結果看,程序一直在執行中,進入了死循環。