黑马程序员技术交流社区

标题: 求教大神。。 [打印本页]

作者: 張帅    时间: 2013-9-3 08:42
标题: 求教大神。。
class Resource                                                                             
{                                                                                                                                                                                          
    String name;
    String sex;
    boolean flag = false;
}

class Input implements Runnable
{
    private Resource r;//1.我在此处建立一个引用。和下面的Output类中建立的是同一个引用? 也就是说Input和Output共用的一个资源吗?这两个类可以都这样用吗 Resource r = new Resource();?
     Input (Resource r)
    {
               this.r=r;//2.在此初始化的内容是  this.name = name; this.sex = sex吗,也就是 说 this.r=r是不是与我前面我说的这两句相等?{:soso_e103:}
    }
      public void run()
     {

     }
}
class Output implements Runnable
{
      private Resource r;
      Output()
      {

       }
}

class TestDemo
{
     public static void main(String args[])
      {
              Resource r = new Resource();
             new Thread(new Input(r)).start();
             new Thread(new Output(r)).start();
      }
}


作者: 张聪珉    时间: 2013-9-5 20:22
第一个问题,input和output里面的r分别是各自的引用,你new了一个对象作为参数传给这input和output这两个类,创建两个线程对象时,里面的引用r指向了同一个对象,此时数据就会被共享,如果run方法里面操作到了共享数据就有可能产生数去不安全问题,那么就需要实现同步,
第二个问题,初始化时是把r这个对象作为参数传入,而不是name和sex,你可以理解为这个对象里面有name和sex,你在new Resource 并没有给这个对象的属性赋值,所以属性值初始化时会是默认值,至于默认值是什么,根据属性的数据类型,比如int默认是0,String默认是null
希望有助于你理解




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