class Producer implements Runnable
{
Q q;
public Producer(Q q)
{
this.q=q;
}
public void run()
{
int i=0;
while(true)
{
if (i==0)
{
q.put("zhangsan", "male");
}
else
{
q.put("lisi", "female");
}
i=(i+1)%2;
}
}
}
class Consumer implements Runnable
{
Q q;
public Consumer(Q q)
{
this.q=q;
}
public void run()
{
while(true)
{
q.get();
}
}
}
class Q
{
String name="unknown";
String sex="unknown";
boolean bFull=false;//语句1
public synchronized void put(String name,String sex)
{
            if(bFull)//语句2
    try{wait();} catch(Exception e){}
            this.name=name;
            this.sex=sex;
            bFull=true;
            notify();
}
public synchronized void get()
{
    if(!bFull)//语句3
    try{wait();} catch(Exception e){}
            System.out.print(name);
    System.out.println(":"+sex);
    bFull=false;
    notify();
}
}
class Tongxin 
{
public static void main(String [] args)
{
  Q q=new Q();
  new Thread(new Producer(q)).start();
  new Thread(new Consumer(q)).start();
}
}
语句1 改成bFull=true; 输出的结果还是一样的为什么?
语句2 和 语句3 到底是什么意思?
我原来是这么理解的:bFull=true时 缓冲区里面已经有内容  所以Consumer 这样判断 if(!bFull) wait(因为!bFull指false 这时缓冲区里面为空)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【kinghukyoun】截止到2008-07-16 09:21:55的历史汇总数据(不包括此帖):
    发帖的总数量:3                        发帖的总分数:90                       每贴平均分数:30                       
    回帖的总数量:8                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:3                        结贴的总分数:90                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    语句1 改成bFull=true;输出结果为:unknown:unknown
    语句2的意思是如果bFull为true时等待,也就是等待get
    提示:可能你看到的结果时,最上面的已经被覆盖,运行完马上点停止运行,则可看到unknown:unknown结果