美文网首页
生产者消费者

生产者消费者

作者: 吃块西瓜写代码 | 来源:发表于2019-06-13 22:09 被阅读0次

生产者消费者的管道法实现,要注意不要把push和pop写错地儿了

package com.cooperation;

/**
 *项目名:生产者消费者管道法
 * 描述:多线程,容器{存取——无空间  并发——等待},操作馒头
 * @author : Lpc
 * @date : 2019-06-13 21:
 **/
public class ProduceAndConsumer {
    public static void main(String[] args) {
        SynContainer container = new SynContainer();
        new Productor(container).start();
        new Consumer(container).start();
    }
}
//生产者
class Productor extends Thread{
    SynContainer container;
    public Productor(SynContainer container){
        this.container = container;
    }
    @Override
    public void run(){
        //生产
        for (int i = 0; i < 100; i++) {
            System.out.println("生产第--》"+i+"个馒头");
            container.push(new Steamedbun(i));
        }
    }

}
//消费者
class Consumer extends Thread{

    SynContainer container;
    public Consumer(SynContainer container){
        this.container = container;
    }
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println("消费");
            System.out.println("消费第--》"+container.pop().id+"个馒头");

        }
    }
}
//缓冲区
class SynContainer{
    Steamedbun[] buns = new Steamedbun[10];
    int count = 0;
    //存
    public synchronized void push(Steamedbun bun){
        //容器存在空间生产
        if (count==buns.length){
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        buns[count++] = bun;
        this.notifyAll();
    }
    //获取
    public synchronized Steamedbun pop(){
        //容器中存在才能消费
        if (count == 0){
            try {
                this.wait();//线程阻塞,生产者通知消费结束阻塞
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        count--;
        this.notifyAll();
        return buns[count];
    }
}
//馒头
class Steamedbun{
    int id;

    public Steamedbun(int id) {
        this.id = id;
    }
}

相关文章

  • Dubbo起步

    目录 定义接口 生产者生产者依赖生产者实现 消费者消费者依赖消费者实现 初步印象 定义接口 生产者 生产者依赖 生...

  • 生产者消费者(一)

    生产者消费者模型: 生产者------> 缓存<-------- 消费者

  • 生产者和消费者问题

    生产者和消费者问题 问题简述 组成 系统中有一组生产者和消费者进程 生产者生产者将产品放入缓冲区 消费者消费者进程...

  • 9. python多进程之Queue实现生产者消费者模型

    一、概述 什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此...

  • 生产者消费者

    什么是生产者和消费者 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间不直...

  • java生产者消费者实现

    什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直...

  • 生产者消费者模式-java原生、Disruptor实现方案

    生产者消费者模式介绍 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接...

  • Java实现生产者-消费者模型的几种方法

    什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直...

  • 生产者和消费者模型

    生产者和消费者模型 1. 什么是生产者和消费者模型 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者...

  • 生产者消费者

    生产者/消费者模式(阻塞队列) 生产者消费者模型的实现

网友评论

      本文标题:生产者消费者

      本文链接:https://www.haomeiwen.com/subject/xkaefctx.html