黑马程序员技术交流社区

标题: 求解释等待唤醒机制细节 [打印本页]

作者: wodeairenw    时间: 2013-3-9 23:51
标题: 求解释等待唤醒机制细节
class DDHXTest
{
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();
}
}
class Res
{
  String name;
  String sex;
  boolean flag = false;

}
class Input implements Runnable
{
private Res r;
Input(Res r)
{
  this.r =r;
}//这个构造函数的作用?
public void run()
{
  int x =0;
  while(true)//这个如何理解。
  { synchronized(r)
   {
    if(r.flag)
     try
     {
      r.wait();
     }
     catch (Exception e)
     {
     }
    if(x==0)
    {
     r.name="mike";
     r.sex="nannan";
    }
    else
    {
     r.name="丽丽";
     r.sex="女女女女女";
    }
    x = (x+1)%2;
    r.flag = true;
    r.notify();
   }
  }
}
}
class Output implements Runnable
{
private Res r;
Output(Res r)
{
  this.r =r;
}
public void run()
{
  while(true)
  {
   synchronized(r)
   {
    if(!r.flag)
     try
     {
      r.wait();//那个锁就用那个对象的,如Object就是Object锁就Object.wait
     }
     catch (Exception e)
     {
     }
    System.out.println(r.name+"....."+r.sex);
    r.flag = false;
    r.notify();//那个锁就用那个对象的,如Object就是Object锁就Object.notify,即标示所属的锁。看说明。
   }
  }  
}
}
这是多线程里面等待唤醒机制的代码,里面有几个问题想请教下。
1.while(ture)循环语句,为什么括号里面需要写意个ture,这个不知道如何理解。
2.Input构造函数作用?
private Res r;//3.这个的作用是什么?如String类类型定义一个引用?如String name?。
Input(Res r)
{
  this.r =r;
}
就我的理解是主函数里面已经建立对象就没必要传入Res r引用,该类可以直接调用吧。求解释下。

作者: amen0205    时间: 2013-3-10 05:53
1   while  循环要判断条件才能运行   true是为了保证循环能一直执行下去   这样才能不停的  写入 数据  取出数据
2  构造函数的左右 是为保证资源Res的唯一性   在main方法里面创建了Res对象  两个类的对象都要对同一个Res对象进行操作
3  额  你该类中需要用到Res对象  当然要定义一个  不然对谁进行操作  

你的理解是不对的  主函数建立对象了   那这个对象和  Input 类还有Ourput类怎么建立关系呢  不传入就没关系  没关系  那数据往哪写  又从哪读




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