多執行緒-死鎖問題概述和使用

ZHOU_VIP發表於2017-06-03

package cn.itcast_02;

public class DieLock extends Thread {

	private boolean flag;

	public DieLock(boolean flag) {
		this.flag = flag;
	}

	@Override
	public void run() {
		if (flag) {
			synchronized (MyLock.objA) {
				System.out.println("if objA");
				synchronized (MyLock.objB) {
					System.out.println("if objB");
				}
			}
		} else {
			synchronized (MyLock.objB) {
				System.out.println("else objB");
				synchronized (MyLock.objA) {
					System.out.println("else objA");
				}
			}
		}
	}
}


package cn.itcast_02;

public class MyLock {
	// 建立兩把鎖物件
	public static final Object objA = new Object();
	public static final Object objB = new Object();
}


package cn.itcast_02;

/*
 * 同步的弊端:
 * 		A:效率低
 * 		B:容易產生死鎖
 * 
 * 死鎖:
 * 		兩個或兩個以上的執行緒在爭奪資源的過程中,發生的一種相互等待的現象。
 * 
 * 舉例:
 * 		中國人,美國人吃飯案例。
 * 		正常情況:
 * 			中國人:筷子兩支
 * 			美國人:刀和叉
 * 		現在:
 * 			中國人:筷子1支,刀一把
 * 			美國人:筷子1支,叉一把
 */
public class DieLockDemo {
	public static void main(String[] args) {
		DieLock dl1 = new DieLock(true);
		DieLock dl2 = new DieLock(false);

		dl1.start();
		dl2.start();
	}
}


相關文章