有个程序执行后不是想要的结果。想要2个线程交替运行,结果却是无序的执行,帮忙看看哪里出了问题
class Resource
{
String name;
String sex;
boolean flag = false;
}
class InPut implements Runnable
{
Resource res;
InPut(Resource res)
{
this.res = res;
}
public void run()
{
int x = 0;
while(true)
{
synchronized(res)
{
if(res.flag)
try
{
res.wait();
}
catch (Exception e)
{
}
if(x==0)
{
res.name = "老王";
res.sex = "男";
}
else
{
res.name = "小张";
res.sex = "女";
}
x=(x+1)%2;
res.flag = true;
res.notify();
}
}
}
}
class OutPut implements Runnable
{
Resource res;
OutPut(Resource res)
{
this.res = res;
}
public void run()
{
while(true)
{
synchronized(res)
{
if(!res.flag)
try
{
this.wait();
}
catch (Exception e)
{
}
System.out.println(res.name+"----->"+res.sex);
res.flag = false;
res.notify();
}
}
}
}
class InOutWaitNotifyDemo
{
public static void main(String[] args)
{
Resource res = new Resource();
InPut in = new InPut(res);
OutPut out = new OutPut(res);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
t1.start();
t2.start();
}
}
/*运行结果
* 小张----->女
老王----->男
小张----->女
小张----->女
老王----->男
小张----->女
老王----->男
老王----->男
小张----->女
。。。
* */ |
|