【HarmonyOS】【多執行緒與併發】EventHandler
阿新 • • 發佈:2021-12-10
多執行緒與併發(EventHandler)學習筆記
EventHandler與EventRunner
EventHandler相關概念
● EventHandler是一種使用者在當前執行緒上投遞InnerEvent事件或者Runnable任務到非同步執行緒上處理的機制;
● EventHandler需要配合EventRunner進行使用;
● EventRunner是一種事件迴圈器;
● 迴圈處理從該EventRunner建立的新執行緒的事件佇列中獲取InnerEvent事件或者Runnable任務(可執行任務);
EventHandler有兩個主要作用:
● 在不同執行緒間分發和處理InnerEvent事件或Runnable任務;
● 延遲處理InnerEvent事件或Runnable任務;
使用EventHandler實現執行緒間通訊的主要流程:
● EventHandler投遞具體的InnerEvent事件或者Runnable任務到EventRunner所建立的執行緒的事件佇列。
● EventRunner迴圈從事件佇列中獲取InnerEvent事件或者Runnable任務.
● 處理事件或任務:
—— 如果EventRunner取出的事件為InnerEvent事件,則觸發EventHandler的回撥方法並觸發EventHandler的處理方法,在新執行緒上處理該事件。
—— 如果EventRunner取出的事件為Runnable任務,則EventRunner直接在新執行緒 上處理Runnable任務。
相關程式碼
執行緒類
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;
/** * 切換任務到主執行緒執行 * @param runnable */ public static void runMain(Runnable runnable) { //切換到主執行緒 EventRunner runner = EventRunner.getMainEventRunner(); EventHandler eventHandler = new EventHandler(runner); //執行任務 eventHandler.postSyncTask(runnable); }
/**
* 在子執行緒執行任務
* @param runnable
*/
public static void runChild(Runnable runnable) {
//開啟一個新執行緒
EventRunner runner = EventRunner.create(true);
EventHandler eventHandler = new EventHandler(runner);
//執行任務
eventHandler.postTask(runnable,0,EventHandler.Priority.IMMEDIATE);
}
使用
//MyExecutor 是執行緒類的類名
MyExecutor.runChild(new Runnable() {
@Override
public void run() {
System.out.println("----MyExecutor:在非同步執行緒執行任務");
MyExecutor.runMain(new Runnable() {
@Override
public void run() {
System.out.println("----MyExecutor:回到主執行緒執行任務");
}
});
}
});
作者:萌狼藍天,轉載請註明原文連結:https://www.cnblogs.com/mllt/p/HarmonyOS_edu_note_MultithreadingAndConcurrency.html | 萌狼藍天@嗶哩嗶哩 | QQ:3447902411(僅限技術交流,新增請說明方向)