本帖最后由 张俊迪 于 2013-5-28 01:09 编辑
class ShangPin//定义一个商品类
{
String name;
int num;
boolean flag=true;
}
class Input implements Runnable
{
private ShangPin s;
Input(ShangPin s)
{this.s=s;}
public void run()
{
while(true)
{
System.out.println(s.flag);
synchronized(s)
{
if(s.flag)
{
try{s.wait();}catch(Exception e){}
}
System.out.println("生产");
s.flag=false;
s.notify();
}
}
}
}
class Output implements Runnable
{
private ShangPin s;
Output(ShangPin s)
{
this.s=s;
}
public void run()
{
while(true)
{
System.out.println(s.flag);
synchronized(s)
{
if(!s.flag)
{
try{s.wait();}catch(Exception e){}
}
System.out.println("-------消费");
s.flag=true;
s.notify();
}
}
}
}
class Thread1
{
public static void main(String[] args)
{
ShangPin s=new ShangPin();
Input in=new Input(s);
Output out=new Output(s);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();
}
}
我测试了,虽说不能交替出现,但是放上wait和notify输出结果会明显点这证明wait和notify起点作用,但是很不安全。我假设了下面的情况,也许是监听器不一致造成的,可如是本题的监听器不是ShangPin定义的这个s吗,他们不都是一样的吗,如果是定义了不同的锁了,可我的代码和老师定义多线程的方法是一样的,纠结呀,求解答 |