*/ public EventBus() { this(DEFAULT_BUILDER); } EventBus(EventBusBuilder builder) { logger = builder.getLogger(); subscriptionsByEventType = new HashMap<>(); typesBySubscriber = new HashMap<>(); stickyEvents = new ConcurrentHashMap<>(); mainThreadSupport = builder.getMainThreadSupport()...
5、AllowConcurrentEvents的作用 它所在的代码为: 即如果订阅者方法上有注解AllowConcurrentEvents,则返回Subscriber,否则,返回SynchronizedSubscriber。SynchronizedSubscriber的字面意思为同步订阅者,它的实现代码为: 即没有使用注解AllowConcurrentEvents的订阅者,在并发环境中,都是串行执行。这在高并发环境中,会严重影响性能。
1.3 EventBus(EventBusBuilder builder) EventBus(EventBusBuilderbuilder){logger=builder.getLogger();//分析 1subscriptionsByEventType=newHashMap<>();//分析 2typesBySubscriber=newHashMap<>();//黏性事件: 发送事件之后, 再订阅该事件也能收到该事件,跟黏性广播类似. 使用支持并发的 ConcurrentHashMap 创建...
然而,在concurrent包发布以前,在多线程环境下,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度。好在此时,强大的concurrent包横空出世了,而他也给我们带来了强大的BlockingQueue。(在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起...
注解有俩个:AllowConcurrentEvents和Subscribe,@AllowConcurrentEvents代表使用线程安全方式获得通知和@Subscribe代表这是一个订阅者,这俩注解和一起使用。 EventBus也就是观察者角色类有两个 EventBus和AsyncEventBus,前面是同步消息,后面支持异步消息。 DeadEvent是指没人关心的消息,可以做一下特殊处理,这个还是很有用,...
结论:Google guava中的AsyncEventBus组件默认是同步处理,使用多线程但未设置@AllowConcurrentEvents会出现多线程之间的抢锁情况,导致业务消费kafka消息变慢产生消息积压。 四、解决方案 方案一:去除EventBus这一层,直接使用主线程消费EventBus使用场景一般在有多个订阅者情况下使用,排查业务逻辑过程中业务逻辑只有一个Subscri...
2.1,粘性事件,保存到ConCurrenHashMap集合,(在构造方法中实现), HashMap效率高,但线程不安全,在多线程的情况下,尽量用ConcurrentHashMap,避免多线程并发异常 EventBus(EventBusBuilder builder) { logger = builder.getLogger(); subionsByEventType =newHashMap<>(); ...
AsyncTask被设计成为一个工具类,要求我们尽量执行一些短小的操作,如果需要在线程中执行较长时间的任务,那么建议直接使用java.util.concurrent包中提供的各种API,如Executor、 ThreadPoolExecutor以及FutureTask。 ** Loader ** Android 3.0引入了Loader,来解决Activity/Fragment生命周期的问题,但Loader仍然要维持Activity/Fragm...
(); typesBySubscriber = new HashMap<>(); stickyEvents = new ConcurrentHashMap...
subscriptionsByEventType = new HashMap<>(); typesBySubscriber = new HashMap<>(); stickyEvents = new ConcurrentHashMap<>(); 前三行是三个hashMap但有所不同: subscriptionsByEventType 对应的hashMap是: 代码语言:javascript 复制 privatefinal Map<Class<?>,CopyOnWriteArrayList<Subscription>>subscriptions...