java多线程同步:生产者与消费者问题

生产者与消费者问题问题是线程同步里边一个很经典的问题。

用通俗的语言来描述:一群生产者不断的生产产品,并将产品放到一个容器里边;同时一群消费者不断从容器里边消费产品。

容器的容量是有限的。如果容器满了,生产者不能再往容器放产品,必须进入等待状态。等待产品被消费者拿走了,再往容器放产品。

同样,如果容器空了,消费者也必须进入等待状态。等待生产者往里边放产品,再将消费者唤醒。

下边我们来看看如何用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];

	/*
	 * 此方法用于往篮子里扔面包 每当厨师生成好一个面包就往篮子里边扔 由于当某一个厨师在往篮子扔面包的过程(还没扔完&
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值