最近项目中用到了GUAVA的eventbus来做异步操作,感觉很顺手,这里写了个小demo,作为备忘:(引入guava 18.0版本)
1.AppEventBus类:用来注册,执行和卸载事件,内部实例化了一个AsyncEventBus类,用线程池开了四个线程。
2.StringMessageEvent:事件类。
3.StringMessageListener类:监听者,会实例化一个AppEventBus和一个具体业务处理类StringMsgHandler。当监听到StringMessageEvent事件的时候,会执行 带有 @Subscribe 注解的方法。
4.StringMsgHandler:具体处理业务的类。
上代码:
public class AppEventBus { private final AsyncEventBus eventBus; public AppEventBus(){ this.eventBus = new AsyncEventBus(Executors.newFixedThreadPool(4)); } /** * 注册事件 */ public void register(Object object){ eventBus.register(object); } /** * 执行事件 * @param object */ public void post(Object object){ eventBus.post(object); } /** * 卸载事件 * @param object */ public void unRegister(Object object){ eventBus.unregister(object); } }
public class StringMessageEvent { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public StringMessageEvent(String message) { this.message = message; } }
public class StringMessageListener { private AppEventBus eventBus; private StringMsgHandler msgHandler; public StringMessageListener(AppEventBus eventBus, StringMsgHandler msgHandler) { this.eventBus = eventBus; this.msgHandler = msgHandler; } public void init(){ this.eventBus.register(this); } @Subscribe public void handle(StringMessageEvent messageEvent){ for(int i = 0;i<100;i++) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(messageEvent.getMessage()).append(" thread : ").append(Thread.currentThread().getId()); msgHandler.printMsg(stringBuilder.toString()); } } }
public class StringMsgHandler { public void printMsg(String msg){ StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(msg).append(" in ").append(new Date()); System.out.println(stringBuilder.toString()); } } //test类
public class TestGuava { public static void main(String[] args){ AppEventBus appEventBus = new AppEventBus(); StringMsgHandler handler = new StringMsgHandler(); StringMessageListener listener = new StringMessageListener(appEventBus,handler); listener.init(); for(int i = 0;i<10;i++) { appEventBus.post(new StringMessageEvent("hello World" + i)); } } } 运行结果里可以清晰的看到四个线程之间的切换。
相关推荐
在Event Bus中,事件(Event)是一个简单的Java对象,包含了需要传递的信息。发布者(Publisher)通过Event Bus发送事件,而订阅者(Subscriber)注册到Event Bus上,监听特定类型的事件。当事件被发布时,Event ...
- **缓存**:Guava 提供了一种高效、可配置的缓存实现,使得缓存数据变得简单,支持自动过期和大小限制。 - **函数式编程**:Guava 引入了 Function 和 Predicate 等接口,促进了函数式编程风格在 Java 中的应用。...
Guava-Event-Bus 学习笔记 Guava的EventBus源码学习,基于Guava的18.0版本 分析者: ###1. 背景简介 EventBus是google的一个Java工具包其中的一个工具类,类似的有多个版本其中包括移植到Android端的 和改良的,功能...
本文将深入探讨两个常用的重试框架:Spring Retry和Guava Retry,并通过一个名为`retry-starter`的Spring Boot项目实例,来解析它们的使用方式以及差异。 首先,我们来看Spring Retry。Spring Retry是Spring框架的...
Guava是Google开发的一个核心库,它为Java平台提供了许多实用工具类,涵盖了集合、并发、I/O、字符串处理、数学运算等多个方面。这个压缩包包含的是Guava库的18.0版本,分为两个部分:`guava-18.0.jar`和`guava-18.0...
在标题和描述中提到的"guava-23.0.zip"是一个包含Guava库版本23.0的压缩文件,而"guava.jar"则是Guava库的JAR文件,"guava"可能指的是Guava库本身或者与其相关的其他内容。 Guava库的核心特性包括: 1. **集合框架...
guava
guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...
Guava是Google开发的一个核心库,它为Java平台提供了许多实用工具类,极大地丰富了标准库的功能。在Java开发中,Guava库被广泛使用,因为它包含了大量的集合框架、并发支持、缓存机制、字符串处理、I/O操作等多个...
├─Google Guava 第13讲-Guava之CharStreams和ByteStreams源码剖析(比较简单).wmv ├─Google Guava 第14讲-Guava之Closer使用和原理剖析,非常重要.wmv ├─Google Guava 第15讲-Base64原理详解,手动实现base...
在本篇文章中,我们将深入探讨Guava在实际应用中的使用实例,包括文件操作、字符串操作、基本类型操作、集合操作以及断言操作。 1. 文件操作: Guava的`com.google.common.io`包提供了一系列方便的文件操作方法。...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...
赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:guava-17.0.pom; 包含翻译后的API文档:guava-17.0-javadoc-API文档-中文...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
在缓存机制方面,Guava提供了简单易用的缓存实现,这在处理经常需要快速检索但是又可能被更新的数据时非常有用。Guava Cache为开发者提供了丰富的配置选项,包括自动移除策略、缓存大小限制等,可以帮助开发者优化...
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
这个压缩包包含的是Guava的不同版本,分别是guava-2.6.2.jar、guava-18.0.jar、guava-19.0.jar和guava-23.0.jar。每个版本都有其特定的功能和改进,让我们逐一探讨这些版本的关键特性。 1. guava-2.6.2.jar:这是...
赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...
Guava教程的目标是用简单直观的方式解释Guava的基础到高级概念,并指导如何有效地使用其API。 本教程面向大多数Java开发者,无论你是初学者还是经验丰富的专家,都能从中受益。完成本教程后,你将能够轻松地在你的...
谷歌的Guava库是Java开发中的一个非常重要的开源项目,它提供了一系列的高效、实用的工具类,大大简化了常见的编程任务。Guava的核心特性包括集合框架、缓存、原生类型支持、并发库、字符串处理、I/O操作等。这个...