package com.work;
/**
* 测试
*
* @author adi_183@163.com
*
*/
public class ProducterConsumerTest {
public static void main(String[] args) {
Bag bag = new Bag();
Producter producter = new Producter(bag);
Consumer consumer = new Consumer(bag);
new Thread(producter).start();
new Thread(consumer).start();
}
}
/**
* 汉堡包
*
*/
class Hamburger {
private int id;// 汉堡包生产编号
public Hamburger(int id) {
this.id = id;
}
public String toString() {
return " Woto id : " + id;
}
}
/**
* 装汉堡包的袋子
*
*/
class Bag {
private static int index = 0;
private static Hamburger[] wotos = new Hamburger[5];
/**
* 往袋子里面装汉堡包
*
* @param woto
*/
public synchronized void push(Hamburger woto) {
while (index == wotos.length) {
try {
this.wait();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
wotos[index] = woto;
index++;
System.out.println("生产" + woto);
}
/**
* 从袋子里面拿出汉堡包
*/
public synchronized Hamburger pop() {
while (index == 0) {
try {
this.wait();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
index--;
System.out.println("消费" + wotos[index]);
return wotos[index];
}
}
/**
* 生产者
*
*/
class Producter implements Runnable {
private Bag bag;
public Producter(Bag bag) {
this.bag = bag;
}
public void run() {
for (int i = 0; i < 50; i++) {
Hamburger woto = new Hamburger(i);
bag.push(woto);
}
}
}
/**
* 消费者
*
*/
class Consumer implements Runnable {
private Bag bag;
public Consumer(Bag bag) {
this.bag = bag;
}
public void run() {
for (int i = 0; i < 50; i++) {
bag.pop();
}
}
}
分享到:
相关推荐
5. **信号量(可选)**:在某些实现中,可能还会使用`Semaphore`来控制生产者和消费者的数量,以限制同时工作的线程数。 在给定的压缩包文件"生产者与消费者代码"中,很可能包含了实现这一模型的示例代码。通过阅读...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
这可以帮助我们直观地理解线程同步的过程,观察到在生产者和消费者操作之间资源是如何被分配和释放的。这种可视化方式有助于深入理解并发控制策略的效果,对于调试和优化多线程程序非常有帮助。 此外,互斥访问缓冲...
"PV模拟生产者消费者模型"是多线程编程中的一个经典问题,它模拟了实际生产环境中的资源分配与消耗过程。在这个模型中,"生产者"负责创建数据,而"消费者"则负责处理这些数据。为了保证生产者和消费者之间的协同工作...
尽管代码未完整展示逻辑部分,但可以看出其意图是通过按钮点击事件来模拟生产者生产数据和消费者消费数据的过程,从而可视化地演示阻塞和唤醒机制。 ### 总结 生产者-消费者问题不仅是并发编程的核心概念,也是...
Java线程实现的生产者和消费者程序是一种经典的多线程设计模式,用于处理并发操作中的数据共享问题。这种模式在实际编程中广泛应用,特别是在需要高效处理数据流和资源管理的系统中。以下将详细讲解其核心概念、实现...
2. 创建线程:创建生产者和消费者线程,每个线程有自己的任务,即生产数据或消费数据。 3. 同步操作:在生产者线程中,先检查`buffer_space`信号量,如果还有空位,生产数据并减小信号量;反之,则等待。在消费者...
这个压缩包“C#窗体模拟生产者消费者问题.zip”很可能包含了一个C#应用程序,它通过Windows窗体界面展示了这个问题的实现。窗体可能是用来控制生产者和消费者的启动、停止以及显示当前缓冲区的状态。 生产者消费者...
此外,还使用了 `wait()` 和 `notifyAll()` 方法来确保生产者和消费者之间的正确同步: - 当缓冲区满时,`push` 方法会调用 `wait()` 使生产者线程等待,直到消费者消费了一些产品。 - 当缓冲区空时,`pop` 方法也会...
总结来说,"模拟消费者生产者实验"是一个演示操作系统并发控制概念的实践项目,它利用Java的并发工具来实现生产者和消费者之间的线程同步。这个实验不仅有助于理解多线程编程,而且对于设计高效、安全的并发应用程序...
"生产者-消费者"问题是一种经典的多线程同步问题,源于计算机科学中的操作系统领域,用于描述在并发环境中如何协调生产者和消费者之间的操作,确保数据的一致性和避免资源浪费。这个问题的基本设定是有一个共享缓冲...
本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...
`BlockingQueue`提供了一种线程安全的数据结构,它在生产者添加元素和消费者取出元素时会自动处理阻塞,使得生产和消费操作不会相互干扰。 在`MainThread.java`这个文件中,我们可能会看到如何创建一个`...
在提供的文档内容中,使用了Java语言作为实现多线程的工具,并且利用了synchronized关键字以及wait/notify机制来解决生产者和消费者之间的同步问题。我们可以从中提炼出以下关键知识点: 1. 多线程编程基础:在Java...
这个示例可能使用了上述提到的线程同步机制,并通过创建多个生产者和消费者线程来演示数据的生产和消费过程。通过对这个代码的分析和学习,我们可以更深入地理解多线程同步以及生产者消费者模式在实际应用中的实现...
这种模型使得生产者和消费者之间解耦,避免了因直接交互而可能导致的竞态条件和死锁。 在C#中,我们可以使用`System.Collections.Concurrent`命名空间下的`BlockingCollection<T>`类来实现生产消费者队列。这个类...
在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...
生产者消费者模型的核心在于如何有效地协调生产者和消费者的活动,避免生产过快导致资源浪费,或者消费者过快导致资源枯竭。在Java中,我们通常使用`java.util.concurrent`包下的工具类来实现这种模型。 1. **阻塞...
为了避免数据混乱和不一致,需要使用同步机制来控制生产者和消费者之间的数据交换。 在 Windows 操作系统中,提供了多种同步对象来实现同步与互斥,包括信号量、互斥量、临界区和事件等。这些同步对象可以用来控制...
在这个示例中,生产者和消费者都通过一个名为`Queue`的类来交互。`Queue`类包含了两个关键的方法:`put()`和`get()`。这两个方法都是同步的,这意味着在同一时间只有一个线程可以执行这些方法,从而避免了线程安全...