存储结构,生产者到达最大长度等待消费者消费,没有存储数据,消费者等待生产者生产:
package ProductConsumer;
import java.util.LinkedList;
import java.util.List;
import java.util.Date;
/**
* Created by Administrator
*/
public class EventStorage {
private int maxSize;
private List<Date> storage;
public EventStorage(){
maxSize = 10;
storage = new LinkedList<Date>();
}
public synchronized void set(){
while(storage.size() == maxSize){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
storage.add(new Date());
System.out.printf("Set: %d\n", storage.size());
notifyAll();
}
public synchronized void get(){
while(storage.size() == 0){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.printf("Get: %d: %s\n", storage.size(), ((LinkedList<?>)storage).poll());
notifyAll();
}
}
生产者:
public class Producer implements Runnable {
private EventStorage storage;
public Producer(EventStorage storage){
this.storage = storage;
}
@Override
public void run(){
for(int i=0; i<100; i++){
storage.set();
}
}
}
消费者:
public class Consumer implements Runnable {
private EventStorage storage;
public Consumer(EventStorage storage){
this.storage = storage;
}
@Override
public void run(){
for(int i=0; i<100; i++){
storage.get();
}
}
}
public class Main {
public static void main(String[] args){
EventStorage storage = new EventStorage();
Producer producer = new Producer(storage);
Thread thread1 = new Thread(producer);
Consumer consumer = new Consumer(storage);
Thread thread2 = new Thread(consumer);
thread2.start();
thread1.start();
}
}
notify和wait比synchronized灵活。
分享到:
相关推荐
在这个"Producer/Consumer 多线程处理文件"的主题中,我们将深入探讨Java中的生产者消费者模型,以及如何利用这一模式来高效地处理大量数据,如一秒钟处理一千多条记录。 生产者消费者模型源于操作系统理论,是解决...
为了在单个消费者实例中利用多线程,我们需要确保所有线程共享相同的消费者实例,而不是创建多个消费者实例。 - **线程安全**:由于多个线程将访问同一个消费者实例,必须确保代码是线程安全的,尤其是在调用`...
生产者消费者问题是多线程编程中的经典问题,它主要探讨如何在多个线程间共享资源并协调它们的工作流程。在这个问题中,生产者线程负责生成数据,而消费者线程负责消耗这些数据。在单线程模拟中,我们通常会用到线程...
生产者和消费者模型是计算机科学中的一个经典设计模式,它主要解决的是多线程环境下的资源协调问题。在这个模型中,生产者负责生产数据,而消费者则负责消费这些数据。两者之间通过一个共享的缓冲区进行通信,这个...
在计算机科学和并发编程中,"生产者-消费者"问题是一个经典的问题模型,它涉及到多线程间的协作与通信。该问题的核心在于,生产者线程负责生成数据,而消费者线程则负责处理这些数据,两者的操作需要同步进行,以...
"10个VC++多线程操作实例源代码.RAR"这个压缩包很可能包含了一系列的示例项目,旨在帮助学习者理解和掌握如何在VC++环境中进行多线程编程。 多线程是现代计算机系统中并行处理任务的基础。在单核CPU上,多线程通过...
本示例“多线程BUFFER例子”是通过C++实现的,展示了如何在缓冲区(BUFFER)中实现消费者与生产者的并发操作。下面将详细解释这个主题中的关键知识点。 首先,我们要理解什么是生产者-消费者问题。这是一个经典的...
标题中的“Peterson_producer_consumer.zip_c语言Peterson”指的是一个使用C语言实现的基于Peterson算法的生产者-消费者问题实例。生产者-消费者问题是多线程编程中常见的同步问题,而Peterson算法是解决两个进程...
在Java编程领域,多线程是一项关键技能,它允许程序同时执行多个任务,提升系统效率。本示例探讨的是一个经典的问题模型——生产者消费者问题。这个问题是并发编程中的一个典型场景,它模拟了实际生产环境中的供求...
(注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...
在C++编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高了效率和响应性。在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的...
这个压缩包中的文件提供了几个关于Java多线程交互的实例,可以帮助我们深入理解如何在并发环境中控制线程的同步,确保数据的一致性和安全性。 首先,让我们讨论一下标题和描述中提到的关键概念——“多线程交互”和...
ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...
这个例子展示了如何在Java中实现多线程的协作,以及如何利用同步机制(如wait()和notifyAll())来控制线程的执行顺序和资源共享。此外,它还强调了线程安全的实现,防止了数据竞争问题。理解这个模型有助于开发者在...
这个模型在多线程编程中广泛应用于资源管理,确保数据的有序处理和避免资源的过度消耗。 在Java中,实现生产者-消费者模型通常依赖于Java的并发库,如`java.util.concurrent`包下的`BlockingQueue`接口及其实现,如...
5. **代码实现**:在`Consumer-Producer.rar`中的`Consumer-Producer`文件可能包含了具体的Java代码实现,它可能包括两个类——`Producer`和`Consumer`,分别代表生产者和消费者。每个类可能有一个无限循环来持续...
在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...
7. **生产者消费者模型(ProducerConsumer)**:这是一种经典的多线程设计模式,通过使用阻塞队列,生产者线程将数据放入队列,而消费者线程从队列中取出数据。Java并发库中的`BlockingQueue`接口是实现这一模式的...
#### 描述:一个简单的C# 多线程例子,适合初学者学习 这个例子通过构建一个多线程程序来模拟生产者消费者模型,其中包含了生产者线程(Producer)负责生成数据并将其放入共享队列中,消费者线程(Consumer)则负责...
在提供的文件列表中,我们看到多个源代码文件(如producer_consumer_problem.cpp、pc.cpp、pc0.cpp等),这些都是实现生产者消费者模型的不同实例。通过分析这些代码,我们可以学习如何使用C++的多线程库(如std::...