`
weigang.gao
  • 浏览: 486149 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java自带API实现生产者消费者模式

 
阅读更多

通过JDK自带的BlockingQueue来实现生产者与消费者模式

①生产者

package org.fenxisoft.quence;

import java.util.concurrent.BlockingQueue;

public class Producer implements Runnable{
    private BlockingQueue<Integer> queue;
    private int count;
	Producer(BlockingQueue<Integer> queue, int count){
		this.queue = queue;
		this.count = count;
	}
	@Override
	public void run() {
		try {
			for(int i =0; i < count; i++){
				/**
				 * 如果队列满了,则会阻塞
				 * 将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间
				 */
				queue.put(i);
				System.out.println("生产者生产数据:"+i);
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

②消费者

package org.fenxisoft.quence;

import java.util.concurrent.BlockingQueue;

public class Consumer implements Runnable{

	private BlockingQueue<Integer> queue;
	private int count;
	Consumer(BlockingQueue queue, int count){
		this.queue = queue;
		this.count = count;
	}
	
	@Override
	public void run() {
		
		try {
			for(int i =0; i<count; i++){
				/**
				 * 如果队列为空,则会阻塞
				 * 获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)
				 */
				Integer in= queue.take();
				System.out.println("消费者消费数据:"+in);
			}
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
	

}

 ③测试类

package org.fenxisoft.quence;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class BlockingQuenceTest {
	
	public static final int MAX_VALUE = 100;
	
	public static void main(String[] args) {
		
		/**
		 * 创建线程池
		 */
		ExecutorService service = Executors.newCachedThreadPool();
		
		BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(10);
		
		Producer producer = new Producer(blockingQueue, MAX_VALUE);
		Consumer consumer = new Consumer(blockingQueue, MAX_VALUE);
		
		service.submit(producer);
		service.submit(consumer);
		
		service.shutdown();
		
	}

}

 

分享到:
评论

相关推荐

    分布式消息系统Kafka项目-生产者消费者代码实现(基于5台虚拟机完全分布式)

    2. **生产者实现**:Kafka生产者负责将消息发布到主题(topics)。Java API提供了方便的Producer类,通过创建Producer实例,设置配置参数(如acks、batch.size等),然后使用send方法发送消息。生产者还可以选择同步...

    机票API调用java-DEMO

    【机票API调用Java-DEMO】是一个针对Java开发者的学习示例,主要目的是演示如何在Java应用程序中调用机票查询的API服务。API(Application Programming Interface)是软件之间交互的一种方式,它允许开发者通过发送...

    java开发kafka-clients所需要的所有jar包以及源码

    Java开发Kafka客户端是构建基于Apache Kafka的应用程序的关键步骤,Kafka-clients库提供了与Kafka服务器进行交互的API,支持生产者和消费者的实现。在Java中使用Kafka-clients,你需要包含相应的jar包,这些包包含了...

    Java 并发编程实战

    - **生产者消费者模式**:讲解如何使用阻塞队列实现高效的生产者消费者模型。 - **工作窃取模式**:介绍Fork/Join框架和WorkStealingPool的工作原理。 - **线程池**:讲解ExecutorService、ThreadPoolExecutor、...

    JAVA上百实例源码以及开源项目源代码

    Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...

    JAVA并发编程实践-

    - **生产者消费者模式**:利用阻塞队列(`BlockingQueue`)来实现线程间的数据传递,解决生产者和消费者之间如何协调工作的问题。 - **读写锁**:通过`ReentrantReadWriteLock`类实现对共享资源的并发访问控制,允许多...

    Java 208道面试.docx

    - RabbitMQ和Kafka:消息模型,生产者消费者模型,以及如何确保消息的可靠传递。 14. **分布式协调**: - Zookeeper:集群管理,分布式锁,服务发现。 15. **数据库**: - MySQL:索引优化,事务隔离级别,JOIN...

    dianjiu-tell-book-master_java_

    - **消费者组(Consumer Group)**:消费者以组的形式工作,每个分区只能被组内的一个消费者消费,实现负载均衡。 2. **Kafka的特点** - **高吞吐量**:Kafka通过批量发送和存储消息,以及磁盘I/O优化,实现了每...

    [中文]Java并发编程的艺术

    8. **并发设计模式**:书中还会介绍一些经典的并发设计模式,如生产者消费者模型、读写锁策略等,这些模式在实际开发中有着广泛的应用。 9. **并发编程最佳实践**:除了理论知识,书中还会分享一些并发编程的最佳...

    《JAVA并发编程艺术》

    此外,作者还会阐述如何使用BlockingQueue实现生产者消费者模型,这是并发编程中常见的设计模式。 Java内存模型(JMM)是并发编程中绕不开的话题,书里会解释JMM如何保证多线程环境下的可见性和有序性,并通过实例...

    Introducing the Java Message Service

    在这种模式下,消息被发送到一个队列中,然后由消费者从队列中读取消息。每个消息只能被一个消费者接收一次,确保了消息处理的唯一性与可靠性。点对点编程模型适用于那些需要确切一次处理的应用场景,如订单处理或...

    kafka_2.13-2.7.0_1.rar

    Kafka 提供了两种消费者模式:高阶消费者(也称为消费者组)和低阶消费者。消费者组允许多消费者并行消费同一主题的不同分区,实现负载均衡。 5. **集群(Cluster)**:由多个 broker 组成的 Kafka 集群,可以自动...

    Java笔记---李兴华

    5. **自动垃圾回收**:Java自带的垃圾回收机制可以自动释放不再使用的内存资源,简化了内存管理过程。 6. **支持多线程**:Java内置了对多线程的支持,可以轻松地编写并发执行的程序。 #### 四、Java与编译型语言 ...

    Java基于springboot的智慧校园之家长子系统的实现.rar

    在本项目中,"Java基于springboot的智慧校园之家长子系统的实现.rar"是一个完整的软件开发实例,旨在构建一个智慧校园平台的家长子系统。这个系统利用了Java编程语言和SpringBoot框架,以及MySQL数据库来存储和管理...

    Java并发编程实战(中文版).7z

    6. **线程安全的类与设计模式**:探讨了线程安全的设计模式,如单例模式、双重检查锁定、生产者消费者模型等,并分析了一些内置的线程安全类,如DateFormat、ThreadLocal等。 7. **并发编程的最佳实践**:书中总结...

    [电子书][java类]java并发编程实践

    8. **并发设计模式**:如生产者消费者模型、读写锁策略、双端队列等,这些模式有助于解决特定的并发问题。 9. **并发问题诊断和调试**:如何使用JDK自带的监控和诊断工具,如jstack、jconsole、VisualVM等来分析和...

    Kafka 消息队列(高清版)深入理解Kafka:核心设计与实践原理.zip

    - **创建生产者**:使用Java API创建生产者对象,配置必要的参数如bootstrap servers,key/value序列化方式等。 - **发送消息**:调用生产者的send方法将消息发布到指定主题。 - **创建消费者**:配置消费者参数...

    Apache Kafka

    - **生产者示例**:使用Java API创建一个简单的生产者,该生产者可以向指定的Topic发送字符串消息。 - **消费者示例**:创建一个消费者应用程序,该程序订阅特定的Topic并处理接收到的消息。 #### 六、高级特性与...

    Weblogic JMS 依赖jar包下载

    6. **编写生产者和消费者代码**:使用JMS API(如`javax.jms.Connection`,`Session`,`MessageProducer`,`MessageConsumer`等)来创建和发送消息,以及接收和处理消息。 在描述中提到的jar包下载,通常包括以下...

    java的日志工具

    1. **Java Util Logging (JUL)**:这是Java标准库自带的日志API,无需额外依赖,方便易用。JUL提供了基本的日志级别(如SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST)以及日志处理器,可以配置不同的日志...

Global site tag (gtag.js) - Google Analytics