死锁的实例

 

死锁的实例

package day11_second;

public class DeathLock {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DeathLocked1 dl1 = new DeathLocked1();
		DeathLocked2 dl2 = new DeathLocked2();
		Thread t1 = new Thread(dl1);
		Thread t2 = new Thread(dl2);
		t1.start();
		t2.start();
	}

}


class Res {
	
	public static Object obj1 = new Object();
	public static Object obj2 = new Object();
}

class DeathLocked1 implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		fun();
	}

	private void fun() {
		// TODO Auto-generated method stub
		synchronized (Res.obj1) {
			try {Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (Res.obj2) {
				System.out.println("在obj1中调用obj2");
			}
		}
	}
	
}


class DeathLocked2 implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		fun();
	}

	private void fun() {
		// TODO Auto-generated method stub
		synchronized (Res.obj2) {
			try {Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (Res.obj1) {
				System.out.println("在obj2中调用obj1");
			}
		}
	}
	
}

  当启动线程t1后,执行t1的fun方法,占用o1资源,然后t1休眠确保能够让t2来执行。t2执行fun()方法,占有o2资源。此时就形成了死锁产生的第四个必要条件。即线程t1占有了t2所需的资源,t2占有了t1所需的资源,双方都不释放,即形成死锁。

      http://my.oschina.net/u/1469592/blog/208374

转载于:https://www.cnblogs.com/childhooding/p/4741698.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值