黑马程序员技术交流社区
标题:
多线程通讯疑问
[打印本页]
作者:
吕振中
时间:
2013-9-11 13:59
标题:
多线程通讯疑问
本帖最后由 吕振中 于 2013-9-12 09:47 编辑
class Res
{
String name;
String sex;
}
class Input implements Runnable
{
private Res r ;
Input(Res r)
{
this.r = r;
}
public void run()
{
int x = 0;
while(true)
{
if(x==0)
{
r.name="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex = "女女女女女";
}
}
}
}
class Output implements Runnable
{
private Res r ;
Output(Res r)
{
this.r = r;
}
public void run()
{
while(true)
{
System.out.println(r.name+"...."+r.sex);
}
}
}
class InputOutputDemo
{
public static void main(String[] args)
{
Res r = new Res();
Input in = new Input(r);
Output out = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
t1.start();
t2.start();
}
}
复制代码
大神们帮解释一下,这里的Res怎么成了共享资源了呢?
作者:
kmter
时间:
2013-9-11 17:55
你的问题表达得有点含糊不清, 你是不是要问, 把Res对象r分别导入了Input和Output的构造方法中, "理论"上是两个不同的Res, 却发现并非如此?
如果是我以上的猜测的话, 解答如下.
构造方法中this.r = r; 这里是对象引用的传递而并非值传递, 所以在Input 和 Output中两个r虽然是不同的对象引用, 然而指向的却是同一个值, 这就不难解释为何两个线程共享Res 的对象r了. 建议你多去理解一下对象本身与对象引用之间的区别.
作者:
吕振中
时间:
2013-9-12 09:46
kmter 发表于 2013-9-11 17:55
你的问题表达得有点含糊不清, 你是不是要问, 把Res对象r分别导入了Input和Output的构造方法中, "理论"上是 ...
明白了,开始就是卡在这了,下面的更没看明白。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2