首页 > 代码库 > 多线程中死锁产生的演示

多线程中死锁产生的演示

package com.huowolf;

/*死锁的含义:
 * 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。
 * 由于线程被无限期地阻塞,因此程序不能正常运行。
 * 
 * 死锁出现的情形:同步中嵌套同步。
 * 但也可能和谐
 * 
 * 避免死锁的一个通用的经验法则是:
 * 当几个线程都要访问共享资源A、B、C时,保证使每个线程都按照同样的顺序去访问它们,
 * 比如都先访问A,在访问B和C。 
 */
//死锁示例:
class Test implements Runnable{
	private boolean flag;
	public Test(boolean flag) {
		this.flag = flag;
	}
	
	@Override
	public void run() {
			if(flag) {
				while(true) {
							synchronized (MyLock.locka) {
							System.out.println("if locka");
							synchronized (MyLock.lockb) {
									System.out.println("if lockb");
							}
						}
				}
			}else {
				while(true) {
						synchronized (MyLock.lockb) {
						System.out.println("else lockb");
						synchronized (MyLock.locka) {
								System.out.println("else locka");
						}
					}
				}		
			}
		
	}
	
}

class MyLock {
	static Object locka = new Object();
	static Object lockb = new Object();
}
public  class DeadLockTest {

	public static void main(String[] args) {
			Thread t1 = new Thread(new Test(true));
			Thread t2= new Thread(new Test(false));
			t1.start();
			t2.start();
	}

}

多线程中死锁产生的演示