在上一篇博客中写到生产者与消费者模型,但是以上只有一个生产者生产一次商品和一个消费者只消费一次就结束了,现在我们改变一下代码使其变为多个生产者与消费者:
可以线分析一下,我们知道notify方法一次只能唤醒一个线程,所以我们使用notifyAll方法唤醒当前对象的所有线程;
代码如下:
还是分为三个类:
package Producers_consumers;
class Goods {
//商品名称
private String goodsName;
//商品库存
private int count;
//生产方法
public synchronized void set(String goodsName) throws InterruptedException {
//此时还有商品没被消费,等待消费者消费
while (this.count > 0){
// System.out.println("还有库存哦,等待顾客...");
wait();
}
this.goodsName = goodsName;
this.count = count + 1;
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
System.out.println("生产"+toString());
System.out.println("------------------------------");
//生产完商品后通知消费者线程可以消费
notifyAll