`
嵇海波
  • 浏览: 13665 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Producer &Consumer

 
阅读更多
package jms;

import java.util.ArrayList;
import java.util.List;

public class JmsDemo2 {
	
	static final int threadInitNumber = 1;

	public static void main(String[] args) {
		
		Store store = new JmsDemo2().new Store();
		
		List<Thread> producers = new ArrayList<Thread>();
		List<Thread> consumers = new ArrayList<Thread>();
		for(int i=0;i<threadInitNumber;i++){
			producers.add(new Thread(new JmsDemo2().new Producer(store),"【第" + (i+1) +"个生产者】"));
			consumers.add(new Thread(new JmsDemo2().new Consumer(store),"【第" + (i+1) +"个消费者】"));
		}
		
		for(int i=0;i<threadInitNumber;i++){			
			producers.get(i).start();
			consumers.get(i).start();	
		}
	}
	
	
	class Store {
		
		private List<String> entry = new ArrayList<String>();
		
		private boolean isProducer = true;
		
		public synchronized void push(String msg){
			while(isProducer){
				entry.add(msg);
				System.out.println("生产数据" + msg + "等待消费,当前队列深度" + entry.size());
				isProducer = false;
				try {
					this.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("push end isProducer" + isProducer);
			}
			notifyAll();
			
			
		}
		
		public synchronized void get(){
			while(!isProducer){
				if(entry.isEmpty()){
					System.out.println("当前队列为空,等待生产...");
				}
				System.out.println("消费" + entry.remove(entry.size()-1) + "等待生产,当前队列深度" + entry.size());
				isProducer = true;
				try {
					this.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("get end isProducer" + isProducer);
			}
			notifyAll();
		}
	}
	
	class Producer implements Runnable{
		
		Store store;
		
		public Producer(Store store) {
			super();
			this.store = store;
		}

		@Override
		public void run() {
			store.push(Thread.currentThread().getName());
		}
	}
	
	class Consumer implements Runnable{
		
		Store store;
		
		public Consumer(Store store) {
			super();
			this.store = store;
		}

		@Override
		public void run() {
			store.get();
		}
	}

}

 

分享到:
评论

相关推荐

    Producer/Consumer 多线程处理文件

    在这个"Producer/Consumer 多线程处理文件"的主题中,我们将深入探讨Java中的生产者消费者模型,以及如何利用这一模式来高效地处理大量数据,如一秒钟处理一千多条记录。 生产者消费者模型源于操作系统理论,是解决...

    producer_consumer_v2.c

    别人的太贵了,自己写一份分享!c语言实现生产者消费者模型,支持设置生产者消费者线程数量,支持设置消息数量。消息的组织形式为链表。生产者生产消息和消费者处理消息分别需要对应的条件变量。...

    Flex基于Producer和Consumer方式的简易消息推送机制

    Flex基于Producer和Consumer方式的简易消息推送机制

    生产者消费者问题源代码(Producer-consumer problem,PCP),

    在Linux操作系统下用C或C++实现经典同步问题:生产者-消费者问题。 含源代码和文档。 内容: 1.一个大小为10的缓冲区,初始状态为空。 2.2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消费...

    consumer-producer.rar_producer_consumer.c_生产者消费者问题

    在这个问题中,有两组角色:生产者(Producer)和消费者(Consumer)。生产者负责创建或生成资源,而消费者则负责消费这些资源。在多线程环境下,为了确保数据的一致性和避免资源竞争,需要采取适当的同步机制。本...

    producer-consumer问题的分析和讨论

    3. `Producer.java`: 这个文件可能包含了生产者线程的实现。生产者线程会不断地生成数据(在这种情况下可能是事件对象),然后调用`EventStorage`的`put()`方法将数据放入队列。为了防止无限制地生成数据导致队列...

    Python-kafka集群搭建PythonAPI调用Producer和Consumer

    在本教程中,我们将探讨如何搭建一个支持SASL(Simple Authentication and Security Layer)认证的Kafka集群,并使用Python API来创建Producer和Consumer。 ### 1. 安装Kafka 首先,我们需要在服务器上安装...

    ProducerConsumer(生产者消费者问题的单线程模拟)

    std::thread consumerThread(consumer, std::ref(sharedQueue), std::ref(mutex), std::ref(cv)); producerThread.join(); consumerThread.join(); return 0; } ``` 在这个例子中,生产者和消费者通过互斥量和...

    eureka-producer-consumer.zip

    本文将深入探讨如何使用Eureka构建Producer(服务提供者)和Consumer(服务消费者),并利用Feign和Ribbon进行远程调用。 1. **Eureka Server** Eureka Server作为服务注册中心,负责管理所有微服务实例的信息。每...

    ProducerConsumer.java

    The use of producer-consumer questions helps to better understand threads.

    LabVIEW程序学习建议.docx

    3. 架构选择:选择合适的程序架构非常重要,初学者可以选择 State Machine 或 Producer & Consumer 等架构。 4. 程序整理:程序凌乱会降低编程效率,因此需要常常使用工具来整理程序。 5. Type Define:使用 Type ...

    eureka-producer-consumer.rar

    ...本篇文章将深入探讨Eureka作为服务注册中心的工作原理、配置及其实现过程,帮助读者理解和掌握Eureka在实际项目中的应用。 1. **Eureka简介** Eureka是Netflix开源的一个基于REST的服务发现框架,它允许服务提供...

    rocketmq-demo

    - **Producer & Consumer 配置**:两者主要设置 NameServer 地址,以便连接到 NameServer 获取路由信息。 5. **监控与调优** - **监控工具**:RocketMQ 提供了监控工具,如 JMX 和 Prometheus,用于监控系统的...

    操作系统实验模拟生产者消费者问题

    PROGRAM NAME: PRODUCER_CONSUMER */ /* This program simulates two processes, producer which */ /* continues to produce message and put it into a buffer */ /* [implemented by PIPE], and consumer which ...

    Peterson_producer_consumer.zip_c语言Peterson

    标题中的“Peterson_producer_consumer.zip_c语言Peterson”指的是一个使用C语言实现的基于Peterson算法的生产者-消费者问题实例。生产者-消费者问题是多线程编程中常见的同步问题,而Peterson算法是解决两个进程...

    Lab2-JMS-code_jms_brainhht_

    3. **生产者和消费者(Producer & Consumer)**:通过会话创建,它们分别用于发送和接收消息。例如,使用`createProducer()`创建生产者,使用`createConsumer()`创建消费者。 4. **目的地(Destination)对象**:...

    ProducerConsumer-CSharp:C# 制作的 ProducerConsumer Demo

    ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...

    spring-kafka-producer-consumer-example_java_springboot_kafka_

    标题中的“spring-kafka-producer-consumer-example”表明这是一个关于Spring Boot应用,它使用了Apache Kafka作为消息中间件,展示了生产者(producer)和消费者(consumer)的实现。描述中的“Simple application ...

    57119101_王晨阳_ProducerConsumer1

    在这个实验中,57119101_王晨阳_ProducerConsumer1通过Win32 API和Pthreads两种方式实现了这一问题的解决方案。 在实验目的部分,目标是理解并掌握Win32 API中的mutex锁和信号量(semaphores)的使用,以及如何利用...

    Producer_Consumer_synchronization.rar_synchronization_生产者消费者_生产者

    在"Producer_Consumer_synchronization.rar"这个压缩包中,我们可以找到相关的代码示例,用于演示如何在C++环境下实现这一概念。 生产者-消费者问题的核心在于同步和互斥。同步确保生产者不会在缓冲区满时继续生产...

Global site tag (gtag.js) - Google Analytics