A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wodeairenw 中级黑马   /  2013-3-9 23:51  /  1123 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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引用,该类可以直接调用吧。求解释下。

点评

鼓励鼓励  发表于 2013-3-10 07:41

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

1 个回复

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

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

评分

参与人数 1黑马币 +12 收起 理由
黄玉昆 + 12 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马