黑马程序员技术交流社区

标题: 看视频中有几行代码不明白意思,求教 [打印本页]

作者: 硫氢化铁    时间: 2015-8-18 22:53
标题: 看视频中有几行代码不明白意思,求教
  1. class Res
  2. {
  3.         String name;
  4.         String sex;
  5.         boolean flag = false;
  6. }

  7. class Input implements Runnable
  8. {
  9.         private Res r ;
  10.         Input(Res r)
  11.         {
  12.                 this.r = r;
  13.         }
  14.         public void run()
  15.         {
  16.                 int x = 0;
  17.                 while(true)
  18.                 {
  19.                         synchronized(r)
  20.                         {

  21.                                 if(r.flag)
  22.                                         try{r.wait();}catch(Exception e){}
  23.                                 if(x==0)
  24.                                 {
  25.                                         r.name="mike";
  26.                                         r.sex="man";
  27.                                 }
  28.                                 else
  29.                                 {
  30.                                         r.name="丽丽";
  31.                                         r.sex = "女女女女女";
  32.                                 }
  33.                                 x = (x+1)%2;
  34.                                 r.flag = true;
  35.                                 r.notify();
  36.                         }
  37.                 }
  38.         }
  39. }

  40. class Output implements Runnable
  41. {
  42.         private Res r ;
  43.        
  44.         Output(Res r)
  45.         {
  46.                 this.r = r;
  47.         }
  48.         public void run()
  49.         {
  50.                 while(true)
  51.                 {
  52.                         synchronized(r)
  53.                         {
  54.                                 if(!r.flag)
  55.                                         try{r.wait();}catch(Exception e){}
  56.                                 System.out.println(r.name+"...."+r.sex);
  57.                                 r.flag = false;
  58.                                 r.notify();
  59.                         }
  60.                 }
  61.         }
  62. }


  63. class  InputOutputDemo
  64. {
  65.         public static void main(String[] args)
  66.         {
  67.                 Res r = new Res();

  68.                 Input in = new Input(r);
  69.                 Output out = new Output(r);

  70.                 Thread t1 = new Thread(in);
  71.                 Thread t2 = new Thread(out);

  72.                 t1.start();
  73.                 t2.start();
  74.         }
  75. }
复制代码
我没看懂的是两个实现Runnable接口的类中run()前面的代码是干什么用的,只知道毕老师说这样保证的是Res对象的唯一性,为什么?

作者: boboyuwu    时间: 2015-8-18 23:17
2个run访问同一个r里面数据  如果不用r直接用new Res()   那么2个run就得创建2个Res对象   你操作你的我操作我的完全没关系   针对这种需要同步数据的就要使用同一个对象
作者: 硫氢化铁    时间: 2015-8-18 23:32
boboyuwu 发表于 2015-8-18 23:17
2个run访问同一个r里面数据  如果不用r直接用new Res()   那么2个run就得创建2个Res对象   你操作你的我操 ...

那是不是这样,主函数创建了一个Res对象,既然要保证Res对象的唯一,两个函数就创建该类对象记录住r首地址值,然后构造函数初始化?
作者: keviner    时间: 2015-8-18 23:44
构造函数啊,初始化的时候是带着属性的啊




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