为了账号安全,请及时绑定邮箱和手机立即绑定

java 多线程代码中的一个问题,望解答

java 多线程代码中的一个问题,望解答

Neilro3534034 2016-07-16 23:38:00
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();//开启线程   }}如果flag设为false的话,那为什么if(flag)大括号中的内容还可以运行?
查看完整描述

1 回答

?
甫艾蒽廷

TA贡献38条经验 获得超21个赞

我看了下你这里 synchronized同步的是代码,那么在主函数中要构造两个类(即resource)的对象才可以。

查看完整回答
反对 回复 2016-07-18
  • 1 回答
  • 0 关注
  • 1155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信