8、学习线程——死锁

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

public class Suo {

      public static voidmain(String[] args) {

           Thread t1 = new Thread(newTest(true));

           Thread t2 = new Thread(newTest(false));

           t1.start();

           t2.start();

      }

}

 

class Test implements Runnable {

      private boolean flag;

      public Test(boolean flag) {

           this.flag = flag;

      }

      public void run() {

           if(flag){

                 synchronized(Lock.lock1){

                      System.out.println("if....lock1");

                      synchronized(Lock.lock2){

                            System.out.println("if.....lock2");

                      }

                 }

           }

           else{

                 synchronized(Lock.lock2){

                      System.out.println("else....lock2");

                      synchronized(Lock.lock1){

                            System.out.println("else.....lock1");

                      }

                 }

           }

      }

}

class Lock {

      static Object lock1 = newObject();

      static Object lock2 = newObject();

}

线程0线执行,lock1允许进入时,此时打印if lock1。打印完后,线程0拿着lock1的锁想进入lock2中,当然进不去,线程0停止。执行线程1,lock2允许进入,此时打印 else lock2。打印完后,线程1拿着lock2的锁想进去到lock1中,当然也进不去,此时线程1停止。因此构成了死锁。

若线程1先执行是同样的道理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值