Java多线程实现简单生产者消费者模式
来源:互联网 发布:网络舆情公司排名 编辑:程序博客网 时间:2024/05/29 04:03
生产者消费者模式
一种重要的模式,基于等待/通知机制。生产者/消费者模式描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模式关注的是以下几个点:
1、生产者生产的时候消费者不能消费
2、消费者消费的时候生产者不能生产
3、缓冲区空时消费者不能消费
4、缓冲区满时生产者不能生产
代码实例:
public class LockPattern_A {static int food=10;//设定开始食物储量Lock lock;Condition condition;public LockPattern_A(Lock lock,Condition condition) {// TODO Auto-generated constructor stubthis.condition=condition;this.lock=lock;}/*生产者*/public void producer() {try {while(food>0) {lock.lock();/*当食物储量超过30时就唤醒消费者线程,进行消费*/if (food>30) {System.out.println("过剩,需要消费");condition.await();}System.out.println("食物不够,增加食物");System.out.println("当前食物储量"+food);food+=10;//生产者每次增加10个食物condition.signal();}} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}/*消费者*/public void consume() {try {while(food>=5) {lock.lock();/*当食物少于5个时就唤醒生产者线程进行生产*/if (food<=5) {System.out.println("食物不够,需要生产");condition.await();}System.out.println("消费食物");System.out.println("当前食物储量"+food);food-=5;//每次消费5个食物condition.signal();}} catch (InterruptedException e) {e.printStackTrace(); } finally { lock.unlock();}}public static void main(String[] args) {Lock lock = new ReentrantLock();Condition condition = lock.newCondition();final LockPattern_A a = new LockPattern_A(lock, condition);/*生产者线程*/Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stuba.producer();}});/*消费者线程*/Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stuba.consume();}});t1.start();t2.start();}}
0 0
- Java多线程实现简单生产者消费者模式
- java多线程实现生产者消费者模式
- Java多线程实现消费者/生产者模式
- Java多线程实现生产者消费者模式
- java 多线程实现生产者消费者模式
- 简单的生产者消费者模式java实现
- java多线程 ----生产者消费者模式
- Java多线程 --- 生产者消费者模式
- Java多线程 生产者消费者模式
- java多线程---生产者消费者模式
- java 多线程 生产者消费者模式
- 【Java多线程】生产者消费者模式
- 生产者消费者Java多线程实现
- Java多线程实现,生产者消费者
- Java实现 简单的多线程“生产者-消费者”问题
- Java多线程之——生产者、消费者简单实现
- java 用多线程实现多生产者和多消费者模式
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- 数据结构概述
- 关于重定向,你真的理解重定向吗?
- 使用C#创建webservice及三种调用方式_.NET教程
- 浅谈 MVP in Android
- 【OJ2.2递归】1755:菲波那契数列
- Java多线程实现简单生产者消费者模式
- error while loading shared libraries: xxx.so.x的解决办法
- grpc-gateway:grpc转换为http协议对外提供服务
- 欢迎使用CSDN-markdown编辑器
- js中var a=new Object()和var a={}有什么区别吗?
- 2、maven在 Eclipese 上运行
- deepin下配置eclipse+cdt+jdk
- hduoj 2016 数据的交换
- 算法w3——Longest Palindromic Substring(leetcode 5)