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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菜鸟征程 中级黑马   /  2015-9-12 23:10  /  534 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Resource{
       private String name ;
       private String sex ;
       private boolean flag = false;

       public synchronized void set(String name,String sex){
             if(flag )
                   try{
                         this.wait();
                  } catch(InterruptedException e){
                        e.printStackTrace();
                  }
             this.name = name;
             this.sex = sex;
             flag = true ;
             this.notify();
      }
      
      public synchronized void out(){
             if(!flag )
                   try{
                         this.wait();
                  } catch(InterruptedException e){
                        e.printStackTrace();
                  }
             System. out.println(name + "..." + sex);
             flag = false ;
             this.notify();
     }
}

//输入
class Input implements Runnable{
      Resource r;
      Input(Resource r){
             this.r = r;
      }

      public void run(){
             int x = 0;
             while(true ){
                   if(x == 0){
                         r.set( "mike","男" );
                  } else{
                         r.set( "lili","女" );
                  }
                  x = (x + 1)%2;
            }
      }
}

//输出
class Output implements Runnable{
      Resource r;

      Output(Resource r){
             this.r = r;
      }

       public void run(){
             while(true ){
                   r.out();
            }
      }
}

class ResourceDemo {
       public static void main(String[] args){
             //创建资源
            Resource r = new Resource();
             //创建任务
            Input in = new Input(r);
            Output out = new Output(r);
             //创建线程,执行路径
            Thread t1 = new Thread(in);
            Thread t2 = new Thread(out);
             //开启线程
            t1.start();
            t2.start();
      }
}
if(flag)和if(!flag)这两句是不是如果false就执行下面的 和  如果非false就执行下面的。

7 个回复

正序浏览
那要看flag的初始值了,如果flag初始值是true,则if(flag)判断为true,执行下面代码块,如果flag初始值是false,则if(!flag)判断为true,执行下面代码块
回复 使用道具 举报
对的就是这样理解的。。。。。。。。
回复 使用道具 举报
看不懂,不过写这么长,赞一下
回复 使用道具 举报
感谢各位大神。
回复 使用道具 举报
if(flag)  中看flag,如果为真进入if,否则跳过;
if(!flag) 中看!flag,   !falg的值过为真则进入if,否则跳过;
其实就是看if的括号里面的boolean表达式的值来判断是否进入if.
回复 使用道具 举报
路过,看不懂,帮顶
回复 使用道具 举报
if(flag){A} B  ,flag=true,执行A,否则。执行B.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马