黑马程序员技术交流社区

标题: 求大神看看为什么输出结果是这样 [打印本页]

作者: 李国华    时间: 2014-4-1 22:00
标题: 求大神看看为什么输出结果是这样
  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
,求大神给分析分析
作者: 759345779    时间: 2014-4-1 22:44
这位哥们,首先你第三行的代码有点小小的错误 Test(boolean falg)中应为flag,这个错误编译不会报错的,传入的参数写错了等于flag没有被赋值,flag默认值为false,所以会接下来执行else中的语句。一旦进入else中的语句while(true)始终会循环下去,而你的while循环语句没有定义跳出循环,所以会一直else lockb else locka...循环执行下去。
作者: 李国华    时间: 2014-4-2 21:53
759345779 发表于 2014-4-1 22:44
这位哥们,首先你第三行的代码有点小小的错误 Test(boolean falg)中应为flag,这个错误编译不会报错的,传 ...

太感谢你了哥们




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2