java例程练习(多线程[死锁问题])

/*
 *死锁产生有2个原因:
 *1,资源竞争
 *2,进程间的推进顺序非法
 *
 *程序模拟的是第一个情况
 */
public class TestDeadLock implements Runnable {
	public int flag = 1;

	static Object o1 = new Object();
	static Object o2 = new Object();

	public void run() {
		System.out.println("flag=" + flag);
		if(flag == 1) {
			synchronized(o1) {
				try {
					Thread.sleep(500);
				} catch(InterruptedException e) {
					e.printStackTrace();
				}
				synchronized(o2) {
					System.out.println("1");
				}

			}
		}

		if(flag == 0) {
			synchronized(o2) {
				try {
					Thread.sleep(500);
				} catch(InterruptedException e) {
					e.printStackTrace();
				}
				synchronized(o1) {
					System.out.println("0");
				}

			}
		}
	}

	public static void main(String[] args) {
		TestDeadLock td1 = new TestDeadLock();
		TestDeadLock td2 = new TestDeadLock();
		td1.flag = 1;//用flag区分不同的线程
		td2.flag = 0;
		Thread t1 = new Thread(td1);
		Thread t2 = new Thread(td2);
		t1.start();
		t2.start();

	}


}

原文地址:https://www.cnblogs.com/wjchang/p/3671690.html