生产者消费者问题
编程模型:
有一家店,有很多人来,为了提升顾客体验,前台可以放10份餐,不足10份后厨就会通知后厨补上,如果到10份就停止生产.,只要前台有餐就通知顾客取餐,没有餐让顾客等待.
代码有问题
,希望大佬指点下 (已找到, 把else去掉就好了)
进程会一直卡在这里
package cn.usts.edu.lesson08;
import cn.usts.util.Utils;
/**
* 生产者消费之
* 一个资源被需要,才会被创建,
* 在生产者和消费者中间还有一个容器作为缓冲,作为一个生产的标志
*
*
* 逻辑没有问题,代码有问题.
* */
public class ProductorConsumerDemo {
public static void main(String[] args) {
= new Container1();
Container1 container = new Productor(container);
Productor productor = new Consumer(container);
Consumer consumer .start();
productor.start();
consumer}
}
// 生产者
class Productor extends Thread{
;
Container1 container
public Productor(Container1 container) {
this.container = container;
}
@Override
public void run() {
// 生产100只鸡
for (int i = 0; i < 100; i++) {
.push(new Chicken(i));
containerSystem.out.println("生产了第"+i+"只鸡");
}
}
}
// 消费者
class Consumer extends Thread{
;
Container1 container
public Consumer(Container1 container) {
this.container = container;
}
@Override
public void run() {
// 消费100只鸡
for (int i = 0; i < 100; i++) {
= container.pop();
Chicken chicken System.out.println("消费了第--------"+chicken.id+"只鸡");
}
}
}
// 生产的产品
class Chicken{
int id;// 产品编号
public Chicken(int id) {
this.id = id;
}
}
// 容器 缓冲
class Container1 extends Utils {
// 容器
[] chickens = new Chicken[10];//默认可以放10只鸡
Chicken
int count=0;//用来计数
int index=1;
// 把鸡放到容器中
public synchronized void push(Chicken chicken){
// 如果数量达到容器的最大数量,停止生产
if (chickens.length==count){
try {
System.out.println(count+"---------------------");
this.wait();// 容器满了通知生产者等待
} catch (InterruptedException e) {
.printStackTrace();
e}
}
// 如果没有达到容器数量,就生产
[count] = chicken;//把鸡放到容器中
chickens++;//容器数量加1
count
this.notifyAll();//全都唤醒
}
// 消费者消费鸡
public synchronized Chicken pop(){
// 判断容器中有么有鸡
if (count==0){
try {
this.wait(); // 通知消费者等待
} catch (InterruptedException e) {
.printStackTrace();
e}
}
// 有鸡
--;
count= chickens[count]; // 有bug
Chicken chicken this.notify();//通知消费者消费
return chicken;
}
}