[HarmonyOS Next示例代码]多线程任务

多线程任务

介绍

本示例通过@ohos.taskpool和@ohos.worker接口,展示了如何启动worker线程和taskpool线程。

效果预览

首页拷贝文件字符串排序任务池页面

使用说明

  1. 在主界面,可以点击字符串排序拷贝文件按钮进入对应的界面;

  2. 点击字符串排序按钮进入多线程界面:

    worker:

    1. 选择Worker页签,输入待排序的字符串,并以逗号分割。

    2. 点击字符串排序按钮,会将排序前的字符串发送给worker线程,在worker线程实现字符串排序,然后将排序后的字符串发送给主线程,主线程中显示排序后的字符串。

    3. 点击清除按钮,清除字符串。

    taskpool:

    1. 选择TaskPool页签,输入待排序的字符串,并以逗号分割。

    2. 点击立即执行按钮,任务执行完成后将排序后的字符串显示出来。

    3. 点击超时3s执行按钮,任务延迟3s后执行,执行完成后将排序后的字符串显示出来。

    4. 点击函数任务按钮,直接调用执行操作,执行完成后将排序后的字符串显示出来。需要注意的是,通过函数任务创建的task任务不支持取消。

    5. 点击取消任务按钮,会取消最后一个未执行的task任务。需要注意的是,只有当任务数大于最大线程数且任务未开始执行时才可以取消成功。

    6. 点击清除按钮,清除字符串。

  3. 点击拷贝文件按钮进入文件拷贝界面:

    选择需要拷贝的文件,然后点击拷贝文件按钮,文件拷贝成功,触发事件日志显示沙箱下文件个数以及显示部分拷贝成功的文件名。

工程目录

├──entry/src/main/ets                         // 代码区
│  ├──common
│  │  ├──Common.ets                           // 公共工具类
│  │  └──Logger.ets                           // 日志工具类
│  ├──component
│  │  ├──TaskPoolTab.ets                      // taskpool页签
│  │  └──WorkerTab.ets                        // worker页签
│  ├──entryability
│  │  └──EntryAbility.ets  
│  ├──model
│  │  ├──MyWorker.ets                         // 批量拷贝文件方法类
│  │  ├──TaskPoolTab.ts                       // taskpool页签
│  │  └──WorkerTab.ts                         // worker页签
│  └──pages
│     ├──CopyFile.ets                         // 拷贝文件页面
│     ├──TaskPoolTab.ets                      // taskpool页签
│     └──WorkerTab.ets                        // worker页签
└──entry/src/main/resources                   // 应用资源目录

具体实现

  • worker页签的实现在字符串排序页面调用,源码参考StrSort.ets

    • 字符串排序:通过调用executeWorkerFunc()创建一个worker线程,把待排序字符串发送给worker线程,等worker线程排序完成后再把结果返回。
    • 清除:把字符串输入框和结果都清除。
  • taskpool页签的实现在字符串排序页面调用,源码参考StrSort.ets

    • 立即执行:通过调用executeImmediately()创建一个task任务,这个任务是立即执行字符串排序。
    • 超时3s执行:通过调用executeDelay()创建一个task任务,这个任务是延迟3s后执行字符串排序。
    • 函数任务:调用executeFunc()接口,不创建task任务,直接调用taskpool.execute()执行字符串排序。
    • 取消任务:调用cancelTask()接口,取消最后一个未执行的task任务。
    • 清除:把字符串输入框和结果都清除。
  • 批量拷贝文件的功能封装在MyWorker,源码参考:MyWorker.ets

    • 拷贝文件:在CopyFile.ets中调用MyWorker.WorkToCopyFiles(),在WorkToCopyFiles方法中向worker03线程发消息,并在worker03线程中批量拷贝,拷贝完成后将结果返回。

相关权限

不涉及。

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:华为手机。

2.HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。

3.DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。

4.HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。

ConcurrentModule: 本示例通过@ohos.taskpool和@ohos.worker接口,展示了如何启动worker线程和taskpool线程。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值