JAVA-生产消费者模型

本文介绍了Java中的生产消费者模型,通过一个茶叶仓库的例子解释其工作原理。在多线程环境下,生产者和消费者共享茶叶仓库资源,通过加锁确保操作的安全性。消费者在仓库有货时购买,无货时通知生产者;生产者则根据仓库容量生产茶叶或等待。此外,还涉及到线程的wait()和notifyAll()方法的应用。
摘要由CSDN通过智能技术生成

简单介绍一下生产消费者模型,如下图:

一般来说,生产消费者模型就是消费者和生产者可以共同操作茶叶仓库这一个共享资源 。打一个比方,生产者生产茶叶供向茶叶市场,消费者在茶叶市场购买茶叶,其中茶叶市场上的茶叶量就是一个共享资源。生产者生产了茶叶就可以让消费者来消费,并且消费者发现茶叶市场没茶了就让生产生产,这是共享资源的一种方式。

在多线程的情况下 ,对共有资源的操作安全性就显得尤为重要,首先我们要对消费者、生产者和仓库进行上锁处理。

消费者:

先拿到仓库的锁,进入仓库,查看仓库中是否有货,有,可进行购买,然后释放仓库锁;如果没有货,通知生产者生产货物,释放仓库锁。

生产者:

进入仓库查看仓库库存是否已满;已满,通知消费者消费,自己进入等待状态,释放仓库锁,未满,生产产品并唤醒消费者,然后释放锁。

仓库:

具有仓库容量的属性,因为是共有资源,还需要加锁,避免出现线程安全问题。

另外为了实现该模型还需用到线程的两个状态:

wait() 会执行该方法的当前的线程进入等待状态 ;
notifyAll() 唤醒所有被wait()的线程

代码如下:

消费者

package com.thread.v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值