李明 发表于 2011-12-11 11:22
class Res
{
public boolean flag=false;
我也就好奇了,既然打印的r.flag=false的话,那么说!r.flag=true,则if(!r.flag)就等于if(true),那么你一开始定义的r.flag=false,怎么还会去执行if的判断语句呢作者: 李明 时间: 2011-12-11 12:02
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)//flag为false,则执行赋值动作。
try{r.wait();}catch(Exception e){}
if (x==0)
{
r.name="丽丽";
r.sex="女";
}
else
{
r.name="Mike";
r.sex="man";
}
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)//flag为false,则被挂起。释放锁
try{r.wait();}catch(Exception e){}
System.out.println(r.name+"........"+r.sex);
r.flag=false;
r.notify();
}
}
}
}
class P
{
public static void main(String[] args)
{
Res r = new Res();
Input in = new Input(r); //初始化对象拿到锁旗标r
Output out = new Output(r);//初始化对象拿到锁旗标r
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);