| 本帖最后由 jxj4227982333 于 2012-5-27 15:59 编辑 
 今天在复习多线程这块时发现了个小问题,是关于多线程间通信的。如下:
 我的问题都写在上面的注释里面了,谁来帮我把思路捋捋顺。复制代码
class Input implements Runnable
{
      Res r;
      Input(Res r)
     {
        this.r = r;
     }
        public void run()
      { 
        int x = 0;
               while(true)
             { 
                 synchronized(r)     //当input持有锁进入后,output 是不能够进入同步代码块的,当然我的假设               
                    {                       //是input先持有锁进来的output还没来的及判断锁更没有进入等待状态。
                        if(r.flag)              
                          try{r.wait();}catch(Exception e){}   //当input线程执行到这时,进入了等待状态后,它还持有锁啊,   
                      if(x==0)                                              //output线程为什么还能够执行?难道是input进入等待状态
                        {                                                       //后,不仅放弃了执行权,锁也不持有了吗  ?
                           r.name = "小明";                                  
                          r.sex = "男男男男男男";
                        }
                    else
                      {
                        r.name = "rose";
                       r.sex = "female";
                      }
                        x=(x+1)%2;
                       r.flag = true;
                       r.notify();    
               }
          }
     }
}
//////////////////////////////////////////////////////////////////////////////////////////////////
class Output implements Runnable
{
       Res r;
     Output(Res r)
     {
       this.r = r;
    }
       public void run()
       { 
                while(true)
                { 
                 synchronized(r)    //当input持有锁在执行的时候甚至进入等待状态后,output很可能还没有进入同步代码块啊
                      {
                            if(!r.flag)
                          try{r.wait();}catch(Exception e){}
                         System.out.println(r.name+"...."+r.sex);
                          r.flag = false ;
                         r.notify();
                  }
             }
      }
}
 
 
 |