生产者与消费者问题问题是线程同步里边一个很经典的问题。
用通俗的语言来描述:一群生产者不断的生产产品,并将产品放到一个容器里边;同时一群消费者不断从容器里边消费产品。
容器的容量是有限的。如果容器满了,生产者不能再往容器放产品,必须进入等待状态。等待产品被消费者拿走了,再往容器放产品。
同样,如果容器空了,消费者也必须进入等待状态。等待生产者往里边放产品,再将消费者唤醒。
下边我们来看看如何用java代码来实现
我们假设生产者是一群厨师,产品是面包,容器是一个篮子,消费者是一群消费者。
用面向对象的思维来考虑,我们要至少要定义4个类
先定义好面包类
/*
*面包类,用于存放厨师生产的面包
*/
public class Bread {
private String producer;
public Bread(String producer) {
super();
this.producer = producer;
}
@Override
public String toString() {
return producer;
}
}
再定义一个篮子类
/*
* 篮子类,用于存放面包
* 篮子假定最多放10个面包
*/
public class Basket {
private int index = 0;
private Bread[] arrayBread = new Bread[10];
/*
* 此方法用于往篮子里扔面包 每当厨师生成好一个面包就往篮子里边扔 由于当某一个厨师在往篮子扔面包的过程(还没扔完&