`
java183
  • 浏览: 13971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多
生产者与消费者问题Java实现

产品类:

public class Product {
  
    private int id;
    private String value;

    public Product(int id,String value){
        this.id=id;
        this.value=value;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
  
}


公用缓冲池
import java.util.LinkedList;

public class ProductTable {
  
    // 缓冲池
    private LinkedList<Product> products = new LinkedList<Product>();

    // 生产
    public synchronized void produce(Product product) {
        while(products.size() >= 10) { // 容量限制為 10
            try {
                wait();
            }
            catch(InterruptedException e) {}
        }
        products.addLast(product);
        System.out.println(product.getId()+" added");
        notifyAll();
    }

    // 消费
    public synchronized Product consume() {
        while(products.size() <= 0) {
            try {
                wait();
            }
            catch(InterruptedException e) {}
        }
        Product product = (Product) products.removeFirst();
        System.out.println(product.getId()+" removed");
        notifyAll();
        return product;
    }
  
}

生产者:

public class Producer implements Runnable {
  
    private ProductTable productTable;

    public Producer(ProductTable productTable) {
        this.productTable = productTable;
    }

    public void run() {
    for (int i=0; i<5; i++) {
        Product p = new Product(i, "product " + "-" + i);
            productTable.produce(p);
            try {
                Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
    }
    }
}


消费者:
public class Consumer implements Runnable {
  
    private ProductTable productTable;

    public Consumer(ProductTable productTable) {
        this.productTable = productTable;
    }

    public void run() {
        for (int i = 1; i <= 5; i++) {
            try {
                Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            productTable.consume();
        }
    }
}

测试类:

public class Test {

    public static void main(String[] args) {
  
        ProductTable queue = new ProductTable();
      
        // 生产者线程体
        Producer producer = new Producer(queue);
      
        // 消费者线程体
        Consumer consumer = new Consumer(queue);
      
        for (int i=0; i<2; i++) {
        Thread prod = new Thread(producer);
        prod.start();
        }
      
        for (int i=0; i<2;i++) {
        Thread consu = new Thread(consumer);
        consu.start();
        }
      
    }
  
}
分享到:
评论

相关推荐

    生产者与消费者 java实现

    本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...

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

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

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

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

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

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

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

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

    生产者消费者问题 Java实现

    在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...

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

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

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

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

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

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

    java生产者消费者问题

    Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...

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

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

    java生产者与消费者问题

    在解压缩后的"proandcom"文件中,可能包含了进一步的代码示例或详细的解释,你可以查看这些文件以加深对生产者消费者问题的理解。同时,为了优化性能和避免死锁,编写多线程程序时,需要遵循良好的设计原则,例如...

    生产者消费者问题java

    下面是一个简单的生产者消费者问题的Java实现: ```java import java.util.concurrent.ArrayBlockingQueue; public class ProducerConsumerProblem { public static void main(String[] args) { ...

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

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

    java实现生产者消费者

    总结,Java实现的生产者消费者模式利用`BlockingQueue`接口来协调生产者和消费者的动作,确保资源的有效管理和合理分配。通过这种方式,我们可以构建高效、稳定且线程安全的并发程序。在`src`文件夹中,可能包含的是...

    Java生产者与消费者

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

    模拟生产者消费者问题(java)

    在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。它描述了两个不同的线程,生产者负责生成数据,而消费者则负责消耗这些数据。在这个Java实现中,我们将探讨如何使用Java的并发工具来解决这个...

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

    生产者-消费者问题是多线程编程中常见的同步问题,它涉及到如何在多个生产者和消费者之间共享有限资源的问题。在这个场景中,生产者负责生成数据(产品),而消费者则负责消费这些数据。为了保证系统的稳定运行,...

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

    本实验旨在通过实际编程操作,深入理解Java中生产者与消费者模型的工作机制及其同步控制策略,具体目标为实现多生产者与多消费者之间的数据共享和线程同步。 #### 实验原理 生产者-消费者模型主要涉及到以下概念:...

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

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

Global site tag (gtag.js) - Google Analytics