黑马程序员技术交流社区

标题: 多线程通讯疑问 [打印本页]

作者: 吕振中    时间: 2013-9-11 13:59
标题: 多线程通讯疑问
本帖最后由 吕振中 于 2013-9-12 09:47 编辑
  1. class Res
  2. {
  3.         String name;
  4.         String sex;
  5. }

  6. class Input implements Runnable
  7. {
  8.         private Res r ;
  9.         Input(Res r)
  10.         {
  11.                 this.r = r;
  12.         }
  13.         public void run()
  14.         {
  15.                 int x = 0;
  16.                 while(true)
  17.                 {
  18.                                 if(x==0)
  19.                                 {
  20.                                         r.name="mike";
  21.                                         r.sex="man";
  22.                                 }
  23.                                 else
  24.                                 {
  25.                                         r.name="丽丽";
  26.                                         r.sex = "女女女女女";
  27.                                 }
  28.                         
  29.                 }
  30.         }
  31. }

  32. class Output implements Runnable
  33. {
  34.         private Res r ;
  35.         
  36.         Output(Res r)
  37.         {
  38.                 this.r = r;
  39.         }
  40.         public void run()
  41.         {
  42.                 while(true)
  43.                 {
  44.                                 System.out.println(r.name+"...."+r.sex);
  45.                                 
  46.                 }
  47.         }
  48. }


  49. class  InputOutputDemo
  50. {
  51.         public static void main(String[] args)
  52.         {
  53.                 Res r = new Res();

  54.                 Input in = new Input(r);
  55.                 Output out = new Output(r);

  56.                 Thread t1 = new Thread(in);
  57.                 Thread t2 = new Thread(out);

  58.                 t1.start();
  59.                 t2.start();
  60.         }
  61. }
复制代码
大神们帮解释一下,这里的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