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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 張帅 中级黑马   /  2013-9-3 08:42  /  1656 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
      }
}

1 个回复

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

评分

参与人数 1黑马币 +2 收起 理由
張帅 + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马