class Place
{
String name ;
String sex;
boolean y = true ;
}
class InPut implements Runnable
{
//Object obj= new Object(); 你分别new了两个Object类了 操作的根本不是同一个对象
private Place r;
InPut(Place r)
{
this.r=r ;
}
int x=0;
public void run() //
{
while(true )
{
synchronized(r )
{
if (r.y )
try{ r.wait();} catch(Exception e ){}
if (x==0 )
{
r.name="lisi";
r.sex="man";
}
else
{
r.name="张三";
// 当我存到这里的时候 Out 就开始去东西了
r.sex="女女女";
}
x=(x+1 )%2;
r.y=false;
r.notify();
}
}
}
}
class OutPut implements Runnable
{
//Object obj= new Object();
private Place r;
OutPut(Place r)
{
this.r=r ;
}
public void run() //
{
while (true) //
{
synchronized(r )
{
if(!r.y ) // 如果为true的话 就执行了
try{ r.wait();} catch(Exception e ){}
System.out.println(r.name +"....."+r.sex );
r.y=true ;
r.notify();
}
}
}
}
class TongXinDemo
{
public static void main(String[] args)
{
Place p = new Place();
InPut in=new InPut(p);
OutPut out = new OutPut(p);
Thread t1= new Thread(in );
Thread t2= new Thread(out );
t1.start();
t2.start();
}
}
红色部分是我写错的东西 我一开始以为这样是没有值输出的 结果是有值的 为什么? 我的原因:因为一开始y的值为true t1进程被等待 t2进程占用cpu 看t2的代码可以知道 y一直为true t1进程没有唤醒过 所以name和sex就不能被赋初值 所以 我认为没有值打印出 |