生产者与消费者问题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中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...
5. **死锁避免**: 在实现生产者-消费者问题时,必须注意死锁的可能。例如,如果生产者在放入元素前先等待消费者消费,而消费者在取出元素前又等待生产者生产,就可能出现死锁。合理设计同步机制和条件变量的使用可以...
基本满足操作系统课上要求,java实现的生产者消费者模型。
通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。
Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...
知识点:Java实现操作系统中的消费者生产者问题 一、消费者生产者问题概述 消费者生产者问题,也称为有界缓冲区问题,是并发编程中的经典问题,主要用来展示进程或线程之间的同步问题。该问题涉及两个类型的角色:...
在解压缩后的"proandcom"文件中,可能包含了进一步的代码示例或详细的解释,你可以查看这些文件以加深对生产者消费者问题的理解。同时,为了优化性能和避免死锁,编写多线程程序时,需要遵循良好的设计原则,例如...
下面是一个简单的生产者消费者问题的Java实现: ```java import java.util.concurrent.ArrayBlockingQueue; public class ProducerConsumerProblem { public static void main(String[] args) { ...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
总结,Java实现的生产者消费者模式利用`BlockingQueue`接口来协调生产者和消费者的动作,确保资源的有效管理和合理分配。通过这种方式,我们可以构建高效、稳定且线程安全的并发程序。在`src`文件夹中,可能包含的是...
在Java编程中,"生产者与消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的核心思想是通过共享一个有限的缓冲区,使得生产者线程可以将产品放入缓冲区,而消费者线程则可以从缓冲区取出...
在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。它描述了两个不同的线程,生产者负责生成数据,而消费者则负责消耗这些数据。在这个Java实现中,我们将探讨如何使用Java的并发工具来解决这个...
生产者-消费者问题是多线程编程中常见的同步问题,它涉及到如何在多个生产者和消费者之间共享有限资源的问题。在这个场景中,生产者负责生成数据(产品),而消费者则负责消费这些数据。为了保证系统的稳定运行,...
本实验旨在通过实际编程操作,深入理解Java中生产者与消费者模型的工作机制及其同步控制策略,具体目标为实现多生产者与多消费者之间的数据共享和线程同步。 #### 实验原理 生产者-消费者模型主要涉及到以下概念:...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...