死锁 java模拟死锁

所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去
[color=orange]在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。例如:事务A 获取了行 1 的共享锁。事务 B 获取了行 2 的共享锁。
现在,事务 A 请求行 2 的排他锁,但在事务 B 完成并释放其对行 2 持有的共享锁之前被阻塞。
现在,事务 B 请求行 1 的排他锁,但在事务 A 完成并释放其对行 1 持有的共享锁之前被阻塞。
事务 B 完成之后事务 A 才能完成,但是事务 B 由事务 A 阻塞。该条件也称为循环依赖关系:事务 A 依赖于事务 B,事务 B 通过对事务 A 的依赖关系关闭循环。
[/color]

java模拟死锁:
public class TestDealLock implements Runnable {
	
	public int i = 1;
	public static Object o1 = new Object();
	public static Object o2 = new Object();
	
	public void run() {
		
		if(i == 1) {
			synchronized (o1) {
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
				}
				synchronized (o2) {
					System.out.println("1");
				}
			}
		}
		if(i == 0) {
			synchronized (o2) {
				try {
					Thread.sleep(500);
				} catch (Exception e) {
				}
				synchronized (o1) {
					System.out.println("0");
				}
			}
		}
	}
	
}


测试死锁:
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		TestDealLock test1 = new TestDealLock();
		TestDealLock test0 = new TestDealLock();
		test1.i = 1;
		test0.i = 0;
		
		Thread t1 = new Thread(test1);
		Thread t0 = new Thread(test0);
		
		t1.start();
		t0.start();
	}

}

猜你喜欢

转载自vista-move.iteye.com/blog/1839866