Class Table{
public synchronized void putFood(){};
public synchronized void getFood(){};
}
如上,当取食物时调用getFood()同时给this加了锁,发现没食物,于是wait();
wait()时锁释放吗? 不放吧.那么putFood()时就拿不到this锁了吧。那putFood();
是不是就等下去了呢?全部代码如下:
放菜:因为一张桌子由多个厨师放菜,所以厨师放菜的要被同步,如果桌子上已经有十盘菜了.所有厨师
就要等待:
程序代码 程序代码  public synchronized void putFood(Food f){
    while(this.size() >= this.maxSize){
      try{
        this.wait();
      }catch(Exception e){}
    }
    this.add(f);
    notifyAll();
  }拿菜:同上面,如果桌子上一盘菜也没有,所有食客都要等待:
程序代码 程序代码  public synchronized Food getFood(){
    while(this.size() <= 0){
      try{
        this.wait();
      }catch(Exception e){}
    }
    Food f = (Food)this.removeFirst();
    notifyAll();
    return f;
  }

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【fuqiang229】截止到2008-07-13 21:41:35的历史汇总数据(不包括此帖):
    发帖的总数量:12                       发帖的总分数:210                      每贴平均分数:17                       
    回帖的总数量:19                       得分贴总数量:2                        回帖的得分率:10%                      
    结贴的总数量:11                       结贴的总分数:210                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:91.67 %               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    值得尊敬
      

  2.   

    wait()时释放锁,sleep()不释放锁。。楼主
      

  3.   

    楼主,找本《java多线程设计模式》看看吧
      

  4.   

    wait()时锁释放,给别的线程执行的机会。