#EventBus(一) 首先在这里介绍一下Guava,引用并发编程网的说法,Guava工程包含了若干被Google的 Java项目普遍依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 全部这些工具天天都在被Google的工程师应用在产品服务中。根据这段说明看来,Guava的定位应该和Apache Commons工具包相似。
今天要介绍的就是Guava中的EventBus(事件总线),EventBus经过对事件的发布和订阅,来实现对事件的处理。要了解事件总线,首先须要对观察者模式有必定了解,这里就不细讲观察者模式了。首先放一个EventBus的demo: ###1.1 接收消息的Service EventService.javahtml
public class EventService { /** * 接收类型为String.class的Event */ @Subscribe public void sub(String message) { System.out.println(this.toString() + " : " +message); } }
###1.2 事件总线 Demo1.java public class Demo1 {java
[@Test](https://my.oschina.net/azibug) public void testEventBus(){ EventBus eventBus = new EventBus(); eventBus.register(new EventService()); eventBus.post("lanxiang ooooooo~~~~~"); } }
运行测试用例,控制台输出,能够看到注册到EventBus中的EventService的订阅了事件类型为String.class的方法被执行了。编程
com.lanxiang.guava.eventbus.demo.EventService@4fbc9499 : lanxiang ooooooo~~~~~
###1.3 异步事件总线 Demo2.java缓存
public class Demo2 { [@Test](https://my.oschina.net/azibug) public void testAysncEventBus() { AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(3)); eventBus.register(new EventService()); String message = "I have sent "; for (int i = 0; i < 100; i++) { eventBus.post(message + i + " numbers."); } System.out.println("============"); } }
能够看到,使用Guava的EventBus只须要三个步骤:并发
* 初始化EventBus,能够选择异步事件总线,须要初始化线程池异步
* 把提供订阅服务的类注册到EventBus中工具
* 定义好接收Event的方法,给该方法加上@Subscribe注解,方法的参数便是订阅的事件类型post
####下一章会介绍怎样动手写一个简单的EventBus,先出去健个身~~明天去美团报道啦,开心😊测试