EventBus事件分發的執行緒排程

2021-09-24 03:49:25 字數 1071 閱讀 7524

在eventbus3.0之後,事件處理的方法名可以隨便取。但是需要新增乙個註解@subscribe,並且可以指定執行緒模型。

eventbus中的4種treadmode(執行緒模型)

posting(預設):事件在哪個執行緒發布出來的,事件處理函式就會在哪個執行緒中執行。事件處理使用此模式必須避免執行耗時操作,以避免阻塞可能是主線程的發布執行緒。

main:事件處理會在ui執行緒中執行。

background:如果事件本來就是在子執行緒中發布出來的,那麼事件處理函式直接在發布事件的執行緒中執行。如果事件是在ui執行緒中發布出來的,使用乙個後台執行緒,按順序傳遞其所有事件。

async:無論事件在哪個執行緒中發布,都在單獨的執行緒中呼叫事件處理方法。

事件的分發最終會呼叫posttosubscription對事件進行處理:

private void posttosubscription(subscription subscription, object event, boolean ismainthread)  else 

break;

case background:

if (ismainthread) else

break;

case async:

asyncposter.enqueue(subscription, event);

break;

default:

throw new illegalstateexception("unknown thread mode: " + subscription.subscribermethod.threadmode);

}}

mainthreadposter繼承自handler,將訂閱方法切換到主線程。backgroundposter和asyncposter繼承自runnable,將事件分發事件加入佇列並提交任務到執行緒池執行,區別是backgroundposter使用乙個後台執行緒,按順序傳遞其所有事件。

eventbus構造方法中建立了幾個分發者:

eventbus(eventbusbuilder builder)

什麼是事件分發執行緒

序列 推測應是監聽模式,應是所有元件新增的 都註冊到了事件分發執行緒中,並在事件分發執行緒執行,但是訊息佇列是序列的導致耗時任務會拖慢swing介面 預設情況下,所有的awt或者基於swing的應用程式,都是開始於兩個執行緒的。其中乙個就是主線程,它處理main方法裡面的 另外乙個執行緒,被稱作 事...

事件匯流排 EventBus

在非父子元件需要進行通訊的時候,除了vuex之外,還有就是事件匯流排了 eventbus 又稱為事件匯流排。在vue中可以使用 eventbus 來作為溝通橋梁的概念,就像是所有元件共用相同的事件中心,可以向該中心註冊傳送事件或接收事件,所以元件都可以上下平行地通知其他元件,但也就是太方便所以若使用...

EventBus粘性事件

普通事件都是在訂閱後才可以接收到事件,如果事件的傳送在訂閱事件之前,則收不到事件。而粘性事件指的是在傳送事件之後再訂閱該事件也能收到該事件。儲存粘性事件的map private final map?object stickyevents 傳送粘性事件 public void poststicky o...