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:回到主线程执行任务");
}
});
}
});

【HarmonyOS】【多线程与并发】EventHandler的更多相关文章

  1. JAVA 多线程和并发学习笔记(三)

    Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Execut ...

  2. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  3. [转] JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  4. JAVA多线程和并发基础面试问答

    转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...

  5. 【多线程】JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  6. 面试题_1_to_16_多线程、并发及线程的基础问题

    多线程.并发及线程的基础问题 1)Java 中能创建 volatile 数组吗?能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组.我的意思是,如果改变引 ...

  7. (转)JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  8. Java多线程与并发模型之锁

    这是一篇总结Java多线程开发的长文.文章是从Java创建之初就存在的synchronized关键字引入,对Java多线程和并发模型进行了探讨.希望通过此篇内容的解读能帮助Java开发者更好的理清Ja ...

  9. java多线程中并发集合和同步集合有哪些?区别是什么?

    java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...

  10. Java多线程和并发基础面试总结

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.收藏起来,希望给予即将找 ...

随机推荐

  1. Spring的轻量级实现

    作者: Grey 原文地址:Spring的轻量级实现 本文是参考公众号:码农翻身 的从零开始造Spring 教程的学习笔记 源码 github 开发方法 使用TDD的开发方法,TDD的开发流程是: 写 ...

  2. Qt概要

    Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏.是一个跨平台的C++图形用户界面.它是一款可以轻松的帮我们做界面的软件. Qt是1991年奇趣科技公司(2008 年 6 月被诺基亚收购)开发的 ...

  3. 《Python语言程序设计》【第2周】Python基本图形绘制

    实例2:Python蟒蛇绘制 #PythonDraw.py import turtle #import 引入了一个绘图库 turtle 海龟库--最小单位像素 turtle.setup(650, 35 ...

  4. scrapy获取汽车之家数据

    1.创建scrapy项目 >scrapy startproject scrapy_carhome 2.找到对应接口 3.创建爬虫文件 > cd scrapy_carhome\scrapy_ ...

  5. GoLang设计模式16 - 模板方法模式

    模板方法设计模式是一种行为型设计模式.这种模式通过常用于为某种特定的操作定义一个模板或者算法模型. 以一次性密码(OTP:One Time Password)为例.我们常见的一次性密码有两种:短信密码 ...

  6. 计算机网络 | 从 ChanelOption 到 Netty 底层

    概述 ChannelOption 是 Netty 中在构建引导类时可以填写的构建 Channel 的选项 其可以分为两部分,一部分为控制 Netty 自身底层运行的选项:另一部分则是操作系统创建 so ...

  7. [Bzoj 1192][HNOI2006]鬼谷子的钱袋(二进制优化多重背包)

    (人生第一篇bzoj题解有点激动 首先介绍一下题目: 看它题目那么长,其实意思就是给定一个数a,求将其拆分成n个数,通过这n个数可以表示出1~a中所有数的方案中,求最小的n. 您看懂了嘛?不懂咱来举个 ...

  8. dart系列之:数学什么的就是小意思,看我dart如何玩转它

    目录 简介 dart:math包的构成 math Random 总结 简介 dart也可以进行数学运算,dart为数学爱好者专门创建了一个dart:math包来处理数学方面的各种操作.dart:mat ...

  9. R包 tidyverse 分列

    代码: 1 library(tidyverse) 2 separate(data = df,col=chr_pos,into=c("chr","pos"),se ...

  10. 关于vim复制剪贴粘贴命令的总结-转

    最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删除): 剪切其实也就顺带删除了所选择的 ...