package thread.producerconsumer;
public 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();
}
}
以上这个类为生产者
package thread.producerconsumer;
public 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();
}
}
以上为消费者
package thread.producerconsumer;
public 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);
}
}
以上为产品类,每个产品具有一个productId
package thread.producerconsumer;
public 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");
// 必须用while,因为当线程在wait的时候被打断,那么程序会跳出if而去执行下一条语句
}
}
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");
// 必须用while,因为当线程在wait的时候被打断,那么程序会跳出if而去执行下一条语句
}
}
top--;
pro = products[top];
products[top] = null;
return pro;
}
}
以上这个类模拟装产品的仓库(以栈为例,先进后出)
package thread.producerconsumer;
public class Test {
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在解决生产者-消费者问题时提供了一系列强大的工具和机制,使得在并发环境中实现数据交换变得既高效又安全。理解并掌握这些知识点对于进行Java并发编程至关重要。
尽管代码未完整展示逻辑部分,但可以看出其意图是通过按钮点击事件来模拟生产者生产数据和消费者消费数据的过程,从而可视化地演示阻塞和唤醒机制。 ### 总结 生产者-消费者问题不仅是并发编程的核心概念,也是...
Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...
系统通过GUI界面,用户可以通过点击"生产"和"消费"按钮来模拟生产者和消费者的活动。 在系统功能简述中,用户界面需使用AWT进行构建,具备三个主要功能: 1. "生产"按钮:每次点击,生产者线程生成一个产品并放入...
本课程设计的目的是通过设计一个消费者进程与生产者进程的同步模拟系统,认识进程间的同步机制生产者消费者问题是一个著名的进程同步问题。 (1) 有一群生产者进程在生产消息, 并将消息提供给消费者进程去消费。为...
在本实验中,我们将探讨如何使用Java来模拟生产者-消费者问题。 生产者-消费者问题的核心在于共享资源的管理,确保生产者不会在消费者未完成消费时过度生产,同时也要防止消费者在无数据可消费时浪费资源。Java中的...
本实验报告旨在解决经典的生产者-消费者问题,通过使用 C 语言编写程序来模拟生产者和消费者之间的同步互斥算法。实验的目的是为了掌握基本的同步互斥算法,并更好地理解经典进程同步问题。 一、实验目的 生产者-...
在生产者-消费者问题中,可以设置信号量的值为缓冲区的大小,生产者在放数据前获取一个许可,如果缓冲区已满,则会阻塞等待;消费者在取数据后释放一个许可,这样可以确保缓冲区不会溢出。 3. **Condition**: Java...
总结来说,进程同步模拟设计——生产者和消费者问题是一个典型的多线程同步问题,通过使用信号量等同步机制,我们可以实现并发进程间的有效协作,保证数据的一致性和系统的正常运行。在实际编程中,理解并熟练运用...
生产者-消费者模型在 Java 中的实现 在计算机操作系统中,生产者-消费者模型是一种常见的同步机制,用于解决多线程之间的数据共享和访问问题。在 Java 中,我们可以使用多线程编程和同步机制来实现生产者-消费者...
**生产者消费者问题的核心概念:** 1. **共享缓冲区**:这是生产者和消费者共享的关键资源。它是一个有限大小的存储区域,用于暂时存放产品。在本实验中,缓冲区的大小是固定的,因此必须管理好何时添加和取出产品...
总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...
在操作系统领域,生产者-消费者问题是多线程和进程同步的经典模型,用于描述并发执行的生产者进程与消费者进程如何共享资源而不会产生数据竞争或死锁的现象。在这个问题中,生产者负责生成数据,而消费者则负责消费...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...