非常典型的死鎖

死鎖

死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。

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();
	
	}
}

運行結果:
在這裏插入圖片描述
在這裏插入圖片描述
從運行結果看,程序一直在執行中,進入了死循環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章