日期:2014-05-20  浏览次数:20657 次

高手帮忙看这个程序写的有没有问题
class   Test
{
public   static   void   main(String[]   args)
{
Queue   q=new   Queue();
Producer   p=new   Producer(q);
Consumer   c=new   Consumer(q);
p.start();
c.start();
}
}

class   Producer   extends   Thread
{
Queue   q;
Producer(Queue   q)
{
this.q=q;
}
public   void   run()
{
for(int   i=0;i <10;i++)
{
q.put(i);
System.out.println( "Producer   put   "+i);
}
}
}
class   Consumer   extends   Thread
{
Queue   q;
Consumer(Queue   q)
{
this.q=q;
}
public   void   run()
{
while(true)
{
System.out.println( "Consumer   get   "+q.get());
}
}
}
class   Queue
{
int   value;
boolean   bFull=false;
public   synchronized   void   put(int   i)
{
if(!bFull)//这个永远得不到执行写的多余是么?
{
value=i;
bFull=true;
notify();
}
try
{
wait();
}
catch(Exception   e)
{
e.printStackTrace();
}

}
public   synchronized   int   get()
{
if(!bFull)
{
try
{
wait();
}
catch(Exception   e)
{
e.printStackTrace();
}
}
bFull=false;
notify();
return   value;
}
}

------解决方案--------------------
怎么会永远得不到执行???????????????????????
------解决方案--------------------
不是多余
你看synchronized 这个关键字就知道可能有多线程的原因了

另外一个线程可能会更改这个值
所以这里就要判断了