生产者消费者问题

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

用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

你可能感兴趣的:(生产者消费者问题)