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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joyuang 黑马帝   /  2012-1-28 22:20  /  2449 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钱兆元 于 2012-1-31 20:05 编辑

老毕的视频在讲多线程时用到这么一个例子,老毕说右边这个代码不能保证处理的是一个对象,应该变成左边的代码,不太明白,为什么Resourse  r再加个构造函数就可以使得两个类处理的是同一个对象?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
去看看main函数:
Res r = new Res();
Input in = new Input(r);
Output out = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
明白了吧。两线程处理的是同一对象。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主不厚道,代码不写全。
不是多个构造函数就能操作同一数据了,关键看后面代码
Resource r = new Resource ();
Input in = new Input(r);
Output out = new Output(r);
两个线程操作的是同一资源,但是如果Input ,Output 两个类中没有这个构造函数的话
private Resource r;
public Input(Resource r)
{
     this.r=r;
}
你后面建立in和out两个对象的时候,你能把r传的进去吗。
而像你右边两个类中都new一个Resource的话那明显是两个对象了,操作的也就不是同一资源了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主, 你需要注意的是这2各部分的代码

1 : Resource r = new Resource ();
        Input in = new Input(r);
       Output out = new Output(r);   //往里面传的是不是同一个r对象

2 : Resource r = new Resource ();   //如果各自都new出来一个新的对象,那操作的肯定不是同一个对象了

      所以我们应该向左边一样在类中定义一个 Resource r ,  这样传进来的对象肯定能够保证是同一个对象了

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