1. 程式人生 > 其它 >【HarmonyOS】【多執行緒與併發】EventHandler

【HarmonyOS】【多執行緒與併發】EventHandler

多執行緒與併發(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(僅限技術交流,新增請說明方向)