黑马程序员技术交流社区

标题: 多线程的问题,求大神 [打印本页]

作者: tangxiaobo1991    时间: 2014-3-4 19:09
标题: 多线程的问题,求大神
本帖最后由 tangxiaobo1991 于 2014-3-4 19:33 编辑


关于线程的疑问:
看下面的代码的红色部分,我觉得当将false赋值给w.flag后,window类中的flag就会变为false(因为flag也是它们的共享数据),在这之后的程序都
应该是运行同步函数show()函数,可为什么还有同步代码块和同步函数交替运行?
class Window implements Runnable
{
  private int tick=500;
  Object o=new Object();
  public boolean flag=true;
  public void run()
  {
   if(flag)
   {
   
   
     while(true)
       {
       synchronized(o)
         {
         if(tick>0)
          {
               System.out.println(Thread.currentThread().getName()+"code..."+tick--);
           }
          }  
       }
    }

   
      else
        while(true)
        show();
   }
        
  public  synchronized  void show()//this
  {
    if(tick>0)
    System.out.println(Thread.currentThread().getName()+"function..."+tick--);
  }
}




class TicketDemoh
{
   public static void main(String[] args)
   {
   
     Window w=new Window();
     Thread t1=new Thread(w);
     Thread t2=new Thread(w);
     t1.start();
     try{Thread.sleep(10);}catch(Exception e){}
      w.flag=false;//???????????
     t2.start();
  }}
其运行结果如下:是code和function交替运行的。



作者: tangxiaobo1991    时间: 2014-3-4 19:11
先来人工置个顶!!!求大神
作者: tangxiaobo1991    时间: 2014-3-4 19:41
有木有阿?最近感觉多线程有点晓困难
作者: e.c    时间: 2014-3-4 20:25
第一个线程if判断完条件为true后就进到while(true)‘code’里了,不会再再判断了
第二个线程if间断完条件为false后就进到while(true)‘function’里了
所以交替
作者: tangxiaobo1991    时间: 2014-3-5 20:45
e.c 发表于 2014-3-4 20:25
第一个线程if判断完条件为true后就进到while(true)‘code’里了,不会再再判断了
第二个线程if间断完条件为 ...

喔喔,原来如此阿。。了解啦,,多谢多谢




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