生产者消费者问题

生产者消费者问题是在操作系统进程控制的经典问题。

用java来描述这个问题比c语言方便很多,java有自己的机制--synchronized,也因此java建立的都是用户级线程,而不是系统级的线程。
下面是关键代码
仓库是用数组表示的
消费者
 synchronized(Commdity.com)
    {
     Commdity.count--;
     tmp=Commdity.com[Commdity.count];//这里把数据取出
     
     Commdity.com[Commdity.count]=null;//此处是个人的c语言写法,(c语言必须程序员自己去对内存进行分配释放,所以不要的地方全部变为NULL)
     System.out.println("取出"+tmp.getName());
     
     
    }
生产者部分
我的写法是先生产,后抢占,这样更节省调度。

   if(Commdity.count<Commdity.num)
   {
    if(tmp==null)
    {
     tmp=new Commdity("存入"+(Commdity.count+1));
     
    }
    
    
     
    synchronized(Commdity.com)
    {
     System.out.println(tmp.getName());
     Commdity.com[Commdity.count++]=tmp;
     tmp=null;
     
    }
   
    
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
    
   }
  }
  
 }
这是具体代码
https://github.com/xpbob/ProAndCus.git

转载于:https://my.oschina.net/xpbob/blog/346483

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值