之前在公司一直使用的是框架封装好的eventbus工具类,底层是这么实现的
public EventDispatcher(Integer threadCount) {
eventBus = new AsyncEventBus(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1));
}
然后每个事件的订阅直接用@Subsribe 这么用的。
最近本机写了个程序,使用到了EventBus,用法和上述类似,但是发现效果却和想象中的不一样,我理解的异步事件分发是指1发送事件可以异步、并发 2消费事件同样异步(即事件的订阅方是基于线程池的能力进行事件的并发处理,而不是排队处理),但是测试结果就是订阅方订阅处理事件是排队进行的,即事件处理是阻塞进行的
上网查了一下,发下有个注解@AllowConcurrentEvents,看名字就知道是允许并发事件,加在了订阅方,果然有效果,处理事件改为并发执行了!