`
wkwukong
  • 浏览: 9070 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Guava event bus 简单例子

阅读更多

最近项目中用到了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));
        }
    }
}

运行结果里可以清晰的看到四个线程之间的切换。
分享到:
评论

相关推荐

    Guava 工程项目包 有实例

    Guava 工程包含了若干被 Google 的 Java 项目广泛依赖 的核心库,希望通过此文档为 Guava 中最流行和最强大的功能,提供更具可读性和解释性的说明

    Guava-Event-Bus:Guava的EventBus源码学习

    Guava-Event-Bus 学习笔记 Guava的EventBus源码学习,基于Guava的18.0版本 分析者: ###1. 背景简介 EventBus是google的一个Java工具包其中的一个工具类,类似的有多个版本其中包括移植到Android端的 和改良的,功能...

    guava源文档

    guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...

    guava-31.1-jre.jar

    guava

    guava-23.0.zip guava.jar guava

    guava-23.0.zip guava.jar guava

    guava-17.0-API文档-中文版.zip

    赠送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文档-中文...

    不加密Google Guava视频教程.txt

    ├─Google Guava 第13讲-Guava之CharStreams和ByteStreams源码剖析(比较简单).wmv ├─Google Guava 第14讲-Guava之Closer使用和原理剖析,非常重要.wmv ├─Google Guava 第15讲-Base64原理详解,手动实现base...

    guava-23.0-API文档-中文版.zip

    赠送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文档-中文...

    guava-18.0-API文档-中文版.zip

    赠送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-20.0-API文档-中文版.zip

    赠送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使用实例,包含文件操作,字符串操作,基本类型操作,集合操作,断言操作

    重试框架spring-retry以及guava-retry的使用

    压缩包包含着springboot项目retry,项目中演示了使用spring-retry传统的方式以及注解的方式使用重试的案例,也有guava-retry的使用案例,以及两者的区别

    guava-23.6-android

    guava-23.6-android guava 版本23.6的 jar 包

    guava-27.0.1-jre-API文档-中文版.zip

    赠送jar包:guava-27.0.1-jre.jar; 赠送原API文档:guava-27.0.1-jre-javadoc.jar; 赠送源代码:guava-27.0.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-27.0.1-jre.pom; 包含翻译后的API文档:guava-...

    guava-30.0-jre-API文档-中文版.zip

    赠送jar包:guava-30.0-jre.jar; 赠送原API文档:guava-30.0-jre-javadoc.jar; 赠送源代码:guava-30.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-30.0-jre.pom; 包含翻译后的API文档:guava-30.0-jre-...

    guava-API文档

    guava-API文档

    guava-16.0.1-API文档-中文版.zip

    赠送jar包:guava-16.0.1.jar; 赠送原API文档:guava-16.0.1-javadoc.jar; 赠送源代码:guava-16.0.1-sources.jar; 赠送Maven依赖信息文件:guava-16.0.1.pom; 包含翻译后的API文档:guava-16.0.1-javadoc-API...

    Guava官方教程-中文

    Google Guava是一个比较有趣的框架,它提供了很多有趣的的功能, google Guava 给开发者提供了如下常用功能: 集合(collections) 缓存(caching) 原生的类型支持(primitives support) 并发类库(concurrency ...

    guava-28.2-jre-API文档-中文版.zip

    赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...

    guava-21.0-rc2 、guava-21.0-rc2-javadoc 、guava-21.0-rc2-sources

    guava-21.0-rc2 、guava-21.0-rc2-javadoc 、guava-21.0-rc2-sources google官网下载

Global site tag (gtag.js) - Google Analytics