黑马程序员技术交流社区

标题: 老毕多线程视频的一个问题 [打印本页]

作者: Joyuang    时间: 2012-1-28 22:20
标题: 老毕多线程视频的一个问题
本帖最后由 钱兆元 于 2012-1-31 20:05 编辑

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

作者: 任奇    时间: 2012-1-28 23:17
去看看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);
明白了吧。两线程处理的是同一对象。
作者: 张伟~    时间: 2012-1-29 23:37
楼主不厚道,代码不写全。
不是多个构造函数就能操作同一数据了,关键看后面代码
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的话那明显是两个对象了,操作的也就不是同一资源了。
作者: 苏格拉底的弟子    时间: 2012-1-30 22:43
楼主, 你需要注意的是这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 ,  这样传进来的对象肯定能够保证是同一个对象了






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