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));
        }
    }
}

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

猜你喜欢

转载自wkwukong.iteye.com/blog/2224823
今日推荐