001 Java线程死锁模拟

1、线程A获得lock1锁,睡一下,然后期望获得lock2锁;

static class A extends Thread{
		@Override
		public void run() {
			//先获取lock1锁
			synchronized(lock1){
				//睡一下
				try {
					Thread.sleep(100);
				} 
				catch (InterruptedException e) {
					e.printStackTrace();
				}
				//再获取lock2锁
				synchronized(lock2){
					System.out.println("A run ok.");
				}
			}
		}
	}

2、线程B获得lock2锁,睡一下,然后期望获得lock1锁;

static class B extends Thread{
		@Override
		public void run() {
			//先获取lock2锁
			synchronized(lock2){
				//睡一下
				try {
					Thread.sleep(100);
				} 
				catch (InterruptedException e) {
					e.printStackTrace();
				}
				//再获取lock1锁
				synchronized(lock1){
					System.out.println("B run ok.");
				}
			}
		}
	}

3、启动代码;

Thread a = new A();
Thread b = new B();
		
a.start();
b.start();

4、分析;

        //1、a线程把lock1持有,b线程把lock2持有;
        //2、a线程期待获得b线程持有的lock2锁;
        //3、b线程期待获得a线程持有的lock1锁;
        //4、a、b都希望获得对方的锁,才愿意释放对方需要的锁;
        //5、死锁于是产生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值