美文网首页
生产者和消费者问题

生产者和消费者问题

作者: 东风谷123Liter | 来源:发表于2018-07-09 18:38 被阅读0次

/*
需求:生产者消费者问题,多个生产者和多个消费者。仓库里面没有商品是,不在消费,生产者生产商品;仓库中有商品时,不在生产,消费者消费商品;

分析:这是一个典型的多线程编程问题,不是我自己分析的,我也说不好。
注意:如何实现多个线程的同步问题,如何让生产线程和消费线程轮流操作资源库。
*/

class Resource{
    private int count = 0;
    private String name ;
    private boolean flag = false;

    public synchronized void set(String name){
            while(flag)
                try{wait();} catch(Exception e){}
            this.name = name+"---"+count++;
            System.out.println(Thread.currentThread().getName()+"--生产者--"+this.name);
            flag = true;
            notifyAll();
            
    }
    public synchronized void out(){
        
            while(!flag)    //让线程被唤醒时,再回去判断标记,防止t1线程唤醒了t2线程,导致生产两次,消费一次的错误情况。
                try{wait();} catch(Exception e){}
            System.out.println(Thread.currentThread().getName()+"消费者"+this.name);
            flag = false;
            notifyAll();    //唤醒所有线程,只唤醒线程池中最上面那个会导致死锁问题,准确来说是类似于死锁问题,于是我们吧所有线程都唤醒。
                            //就算全部唤醒线程运行也不会出错,因为我们让他循环判断标记。
    }
}

class Producer implements Runnable{
    private Resource r; 
    Producer(Resource r){
        this.r = r;
    }
    public void run(){
        while(true){
            r.set("商品");
        }
    }
}

class Consumer implements Runnable{
    private Resource r; 
    Consumer(Resource r){
        this.r = r;
    }
    public void run(){
        while(true){
            r.out();
        }
    }
}

class ProduceConsumer{
    public static void main(String[] args){
        Resource r = new Resource();

        Producer p = new Producer(r);
        Consumer c = new Consumer(r);

        Thread t1 = new Thread(p);    //创建多个生产者,多个消费者;
        Thread t2 = new Thread(p);
        Thread t3 = new Thread(c);
        Thread t4 = new Thread(c);

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

相关文章

  • 生产者和消费者问题

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

  • 生产者消费者

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

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

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

  • 生产者和消费者问题详解

    生产者和消费者问题详解 定义 生产者消费者问题(英语:Producer-consumer problem),也称有...

  • java生产者消费者实现

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

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

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

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

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

  • 第2章 2-4经典同步问题

    1.生产者—消费者问题 The proceducer – consumer problem:多个生产者和消费者对n...

  • 生产者和消费者

    生产者和消费者介绍 生产者和消费者是一个经典的问题,生产者负责生产,生产的东西放入buffer,消费者负责消费,从...

  • 第二章 经典同步问题(4)

    生产者-消费者的问题 有多个生产者和消费者对n个缓冲区的使用。 生产者 produce an item in ne...

网友评论

      本文标题:生产者和消费者问题

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