`
369128396
  • 浏览: 84508 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java实现生产者与消费者问题

    博客分类:
  • java
 
阅读更多
class Producer implements Runnable { 

    private String producerName = null;

    private StoreHouse storeHouse = null;

    public Producer(String producerName, StoreHouse storeHouse) {
        this.producerName = producerName;
        this.storeHouse = storeHouse;
    }

    public void setProducerName(String producerName) {
        this.producerName = producerName;
    }

    public String getProducerName() {
        return producerName;
    }
    
    public void produceProduct() {
        int i = 0;
        while (true) {
            i++;
            Product pro = new Product(i);
            storeHouse.push(pro);
            System.out.println(getProducerName() + " 生产了 " + pro);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                return;
            }
        }
    }

    public void run() {
        produceProduct();
    }

}

class Consumer implements Runnable {
    
    private String consumerName = null;
    
    private StoreHouse storeHouse = null;

    public Consumer(String consumerName, StoreHouse storeHouse) {
        this.consumerName = consumerName;
        this.storeHouse = storeHouse;
    }
    
    public void setConsumerName(String consumerName) {
        this.consumerName = consumerName;
    }
    
    public String getConsumerName() {
        return consumerName;
    }
    
    public void consumerProduct() {
        while (true) {
            System.out.println(getConsumerName() + " 消费了 " + storeHouse.pop());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                return;
            }
        }
    }

    public void run() {
        consumerProduct();
    }

}



class Product {

    private int productId = 0;
    
    public Product(int productId) {
        this.productId = productId;
    }

    public int getProductId() {
        return productId;
    }

    public String toString() {
        return Integer.toString(productId);
    }
}

class StoreHouse {

    private int base = 0;

    private int top = 0;

    private Product[] products = new Product[10];

    public synchronized void push(Product product) {
        while (top == products.length) {
            notify();
            try {
                System.out.println("仓库已满,正等待消费...");
                wait();
            } catch (InterruptedException e) {
                System.out.println("stop push product because other reasons");

            }
        }
        products[top] = product;
        top++;
    }

    public synchronized Product pop() {
        Product pro = null;
        while (top == base) {
            notify();
            try {
                System.out.println("仓库已空,正等待生产...");
                wait();
            } catch (InterruptedException e) {
                System.out.println("stop push product because other reasons");

            }
        }
        top--;
        pro = products[top];
        products[top] = null;
        return pro;
    }
}

public class TestPC {
    public static void main(String[] args) {
        StoreHouse storeHouse = new StoreHouse();
        Producer producer = new Producer("生产者", storeHouse);
        Consumer comsumer = new Consumer("消费者", storeHouse);
        Thread t1 = new Thread(producer);
        Thread t2 = new Thread(comsumer);
        t1.start();
        t2.start();
    }
}
分享到:
评论

相关推荐

    生产者与消费者 java实现

    生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者不会在缓冲区满时继续生产,消费者也不会在缓冲区为空...

    JAVA实现线程间同步与互斥生产者消费者问题

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    java 编写的生产者与消费者问题

    5. **死锁避免**: 在实现生产者-消费者问题时,必须注意死锁的可能。例如,如果生产者在放入元素前先等待消费者消费,而消费者在取出元素前又等待生产者生产,就可能出现死锁。合理设计同步机制和条件变量的使用可以...

    java实现生产者消费者

    在Java中,`java.util.concurrent`包下的`BlockingQueue`接口提供了一种线程安全的数据结构,非常适合用于实现生产者消费者模式。生产者将产品放入队列,消费者从队列中取出产品。`BlockingQueue`提供了`put()`和`...

    java多线程实现生产者和消费者

    通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。

    java 实现操作系统的消费者生产者问题

    知识点:Java实现操作系统中的消费者生产者问题 一、消费者生产者问题概述 消费者生产者问题,也称为有界缓冲区问题,是并发编程中的经典问题,主要用来展示进程或线程之间的同步问题。该问题涉及两个类型的角色:...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    java生产者与消费者实验报告

    通过本次实验,不仅加深了对Java并发编程的理解,还掌握了如何在多线程环境下实现生产者与消费者模型,确保数据的线程安全和一致性。实验过程中,使用Eclipse IDE搭建开发环境,通过编写和调试代码,成功实现了三个...

    java生产者消费者问题

    在CSDN.NET博客文章中,作者详细讨论了如何使用线程同步和等待的应用来解决此问题,并提供了示例代码ProducerConsumer.java和ProducerConsumerx.java,这些代码可以帮助读者更好地理解和实现生产者消费者模型。...

    Java生产者与消费者

    在Java编程中,"生产者与消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的核心思想是通过共享一个有限的缓冲区,使得生产者线程可以将产品放入缓冲区,而消费者线程则可以从缓冲区取出...

    操作系统课程设计——生产者消费者问题Java图形界面动态演示

    设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...

    生产者消费者问题 Java实现

    例如,可以使用`ArrayBlockingQueue`来实现生产者消费者问题: ```java import java.util.concurrent.ArrayBlockingQueue; class Buffer { private final ArrayBlockingQueue<Integer> queue = new ...

    java生产者与消费者问题

    本篇将深入探讨如何使用Java实现生产者和消费者的模型,并通过具体的代码示例进行讲解。 生产者与消费者问题的场景通常如下:有一个共享的缓冲区,生产者负责往缓冲区中添加产品,而消费者则负责从缓冲区中取出并...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    Java实现消费者与生产者两个线程问题

    用Java实现消费者与生产者两个线程进行调度

    java实现生产者消费者问题

    java实现生产者消费者问题 本实验报告的目的是通过编写Java程序实现生产者消费者问题,掌握进程同步和互斥的方法,学习使用信号量机制解决进程互斥问题。 一、实验原理 生产者消费者问题是操作系统中最基本的同步...

    java 生产者消费者问题(源码)

    Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...

Global site tag (gtag.js) - Google Analytics