生产者消费者问题

Posted superxuezhazha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者消费者问题相关的知识,希望对你有一定的参考价值。

技术图片

 

 思路:

生产者判读是否大于20: 若 否,则生产一个产品并且唤醒(消费者).若是,则堵塞.

消费者判读是否大于0,若是,则消费一个产品,并唤醒(生产者).若否,则堵塞.

我们将生产和消费的方法,放到店员类,这样可以操作共享数据.

技术图片
package com.LearnJava.Thread;
class Clerk {
    private int products=0;

    public synchronized void prodectOne(){
        if(products<20){
            products++;
            System.out.println(Thread.currentThread().getName()+"生产第"+products+"个产品");
            notifyAll();
        }else {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public synchronized void consumeOne(){
        if(products>0){
            System.out.println(Thread.currentThread().getName()+"消费第"+products+"个产品");
            products--;
            notifyAll();
        }else {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Productor extends Thread{
    private Clerk c;
    Productor(Clerk c){
        this.c=c;
    }
    @Override
    public void run() {
        while (true){
            c.prodectOne();
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Customer extends Thread{
    private Clerk c;
    Customer(Clerk c){
        this.c=c;

    }
    @Override
    public void run() {
        while (true){
            c.consumeOne();

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public class PCCProblem {
    public static void main(String[] args) {
        Clerk c = new Clerk();
        Productor p1 = new Productor(c);
        Productor p2 = new Productor(c);
        Customer c1 = new Customer(c);
        p1.start();
        p2.start();
        c1.start();






    }
}
View Code

 

以上是关于生产者消费者问题的主要内容,如果未能解决你的问题,请参考以下文章

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

生产者消费者模型-Java代码实现

转: Java并发编程之十三:生产者—消费者模型(含代码)

用 wait-notify 写一段代码来解决生产者-消费者问题

C++ 简单的消费者生产者问题

Java生产消费者模型——代码解析