A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李国华 中级黑马   /  2014-4-1 22:00  /  1185 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test implements Runnable{
  2.         private boolean flag;
  3.         Test(boolean falg){
  4.                 this.flag=flag;
  5.         }
  6.         public void run(){
  7.                 if(flag){
  8.                        
  9.                         while(true){
  10.                         synchronized(MyLock.locka){
  11.                                 System.out.println("if locka");
  12.                                 synchronized(MyLock.lockb){
  13.                                         System.out.println("if lockb");
  14.                                 }
  15.                         }
  16.                         }
  17.                 }
  18.                 else{
  19.                         while(true){
  20.                         synchronized(MyLock.lockb){
  21.                                 System.out.println("else lockb");
  22.                                 synchronized(MyLock.locka){
  23.                                         System.out.println("else locka");
  24.                                 }
  25.                         }
  26.                         }
  27.                 }
  28.                        
  29.         }
  30. }
  31. class MyLock{
  32.         static Object locka=new Object();
  33.         static Object lockb=new Object();
  34. }
  35. public class DeadLockTest {
  36.         public static void main(String[] args){
  37.                 Thread t1=new Thread(new Test(true));
  38.                 //Thread t2=new Thread(new Test(false));
  39.                 t1.start();
  40.                 //t2.start();
  41.         }
  42. }
复制代码

为什么输出结果总是else lockb
else locka
else lockb
else locka
else lockb
else locka
else lockb
else locka
else lockb
else locka
else lockb
else locka
else lockb
else locka
,求大神给分析分析

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
这位哥们,首先你第三行的代码有点小小的错误 Test(boolean falg)中应为flag,这个错误编译不会报错的,传入的参数写错了等于flag没有被赋值,flag默认值为false,所以会接下来执行else中的语句。一旦进入else中的语句while(true)始终会循环下去,而你的while循环语句没有定义跳出循环,所以会一直else lockb else locka...循环执行下去。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
759345779 发表于 2014-4-1 22:44
这位哥们,首先你第三行的代码有点小小的错误 Test(boolean falg)中应为flag,这个错误编译不会报错的,传 ...

太感谢你了哥们
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马