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