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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tangxiaobo1991 中级黑马   /  2014-3-4 19:09  /  998 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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交替运行的。


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
先来人工置个顶!!!求大神
回复 使用道具 举报
有木有阿?最近感觉多线程有点晓困难
回复 使用道具 举报
第一个线程if判断完条件为true后就进到while(true)‘code’里了,不会再再判断了
第二个线程if间断完条件为false后就进到while(true)‘function’里了
所以交替

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
e.c 发表于 2014-3-4 20:25
第一个线程if判断完条件为true后就进到while(true)‘code’里了,不会再再判断了
第二个线程if间断完条件为 ...

喔喔,原来如此阿。。了解啦,,多谢多谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马