通俗理解EventBus工作流程

想了个办法方便让自己记忆EventBus的工作流程,就是代入生活中的事情。
EventBus的工作流程可以通俗地类比于去餐厅吃饭,顾客是事件订阅者,厨房是发送者。
首先顾客来到餐厅,查看菜单,开始点菜,在菜单上打勾勾什么的,菜可以认为是事件(Event),点完之后由服务员(subscriberMethodFinder)接管,服务员找出顾客点了什么菜,然后将其一样一样录入餐厅的点餐系统(subscribe方法),点餐系统由subscriptionsByEventType、typesBySubscriber、stickyEvents组成,录入的过程是这样的:

  1. 将这样菜品与顾客绑定,生成一个小菜单(subscription)
  2. 查看点餐系统里点这个菜的记录(小菜单的CopyOnWriteArrayList集合),从subscriptionsByEventType拿
  3. 如果没有,说明没人点过这个菜,那创建一下这个集合,录入系统
  4. 如果有,则说明这个菜已经点过了,忽略
  5. 接着,对照这个集合,按照顾客优先级高低(开vip优先上菜?),插入这个集合
  6. 找到该顾客的点菜记录(ArrayList集合,从typesBySubscriber拿),如果没有记录,则创建一个记录,录入系统,接着将菜品(Event)放入记录中,完成
  7. 接下来看一下是否已经有已经准备好的菜是顾客需要的,有的话则上菜(粘性事件处理),触发顾客吃菜地动作

接下来就是厨房做好菜,发送出去的过程了。
首先是将菜放到出菜口(EventQueue),只要出菜口有菜,就触发上菜操作(while循环)。上菜的人查看点餐系统,找到点这个菜的人有哪些(一个菜可能一次做好几份,上面说到的小菜单的CopyOnWriteArrayList集合),依次给顾客上菜,触发顾客吃菜地动作(subscription.subscriberMethod.method.invoke)。
顾客离开后就是解注册过程,从点餐系统移除顾客菜单记录、顾客小菜单记录。
线程切换的话感觉可以比喻成,如果厨房和顾客在同一楼层,则不用爬楼(线程切换),否则就要爬楼了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值