厨师与服务生的问题

本文通过一个多线程示例,展示了如何使用Java实现厨师和服务生之间的协调工作。具体来说,厨师负责准备菜品,而服务生则负责取走这些菜品。通过synchronized关键字和wait/notify机制确保线程间的正确同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最基本的多线程的实现...看寝室的兄弟们学到多线程了,自己也回忆回忆!

/**
*title 用多线程实现厨师与服务生的问题
*@author:realsmy
*date 2006-10-22 14:10
*/
public class Test{
 public static void main(String args[]){
  CanGuan c=new CanGuan();
  new Thread(new ChuShi(c)).start();
  new Thread(new FuWuSheng(c)).start();
 }
}

//厨师一直执行餐馆类的set()方法
class ChuShi implements Runnable{
 CanGuan c;
 public ChuShi(CanGuan c){
  this.c=c;
 }
 public void run(){
  while(true){
   c.set();   
  }    
 } 
}

//服务生一直执行餐馆类的get()方法
class FuWuSheng implements Runnable{
 CanGuan c;
 public FuWuSheng(CanGuan c){
  this.c=c;
 }
 public void run(){
  while(true){
   c.get();
  }
 } 
}

class CanGuan
{
 private boolean b = true;
 private int i =1;
 public synchronized void set()
 {
  if(!b)
   try{
    wait();
   }catch(Exception e){}
   System.out.println("厨师做好了菜"+i);
   try{
    Thread.sleep(1000);
   }catch(Exception e){}
   b = false;
   notify();
  
 }
 public synchronized void get()
 {
  if(b)
   try{
    wait();
   }catch(Exception e){}
   System.out.println("服务生取走了菜"+i);
   i++;
   try{
    Thread.sleep(1000);
   }catch(Exception e){}
   b = true;
   notify();  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值