#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,先出去健個身~~明天去美團報道啦,開心😊測試