如何用Java编写代码解决生产者消费者问题?

1038 篇文章 2 订阅
1030 篇文章 9 订阅

在一些面试中,我们永远不知道有什么样的难题在等着我们,最近,不只一位学员反馈,面试官让应聘者写一段程序模拟生产者消费者问题。明明知识掌握得很扎实了,但还是被这道题难住了,果然理论知识要掌握好,项目实践也不能落下。下面,小编就为大家解答如何用Java编写代码解决生产者消费者问题。

首先,我们要想使用程序来模拟,并不用花费太多的时间,但是要先弄明白生产者与消费者的关系。生产者、消费者是两个实体对象,生产者生产物品,消费者消费物品。如果在生产者中定义生产的流程,在消费者中定义消费的流程,两个对象就需要彼此引用,这样依赖性太高,而且实际上性能也不高,这个时候就需要一个缓冲器,一个中间对象,我们把它形象地称之为“仓库”。生产的物品放入仓库,消费的物品从仓库中取出,这样生产者和消费者就能够取消两者之间的引用,直接通过仓库引用来同步状态,降低耦合。可以看到,引入仓库还是很有必要的。

接着我们来看一下生产者、消费者问题的两种类型,一种是使用某种机制来保护生产者和消费者之间的同步,另一种则与Linux中的管道思路相似。相对来说第一种类型的处理方式更为常规,实现方式大致分为三种:经典的wait(),notify()方法、await(),signal()方法以及使用阻塞队列(BlockingQueue)的方法。

然后,用上述方法进行写代码就可以了。理论知识掌握起来比较轻松,但是真正操作起来就没那么简单了。而且写代码这种工作,不同的人有不同的思维方式,也就有不同的写法,所以与其教你怎么写代码,不如教你写代码的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值