网站开发专业课程,媒体运营具体做什么,佛山设计公司排名,一个公司可以做几个网站备案同步任务是指在多个线程之间协调执行的任务#xff0c;其目的是确保多个任务按照一定的顺序和规则执行#xff0c;例如使用锁来防止数据竞争。
同步任务的实现需要考虑多个线程之间的协作和同步#xff0c;以确保数据的正确性和程序的正确执行。
由于TaskPool偏向于单个独…同步任务是指在多个线程之间协调执行的任务其目的是确保多个任务按照一定的顺序和规则执行例如使用锁来防止数据竞争。
同步任务的实现需要考虑多个线程之间的协作和同步以确保数据的正确性和程序的正确执行。
由于TaskPool偏向于单个独立的任务因此当各个同步任务之间相对独立时推荐使用TaskPool例如一系列导入的静态方法或者单例实现的方法。如果同步任务之间有关联性则需要使用Worker例如无法单例创建的类对象实现的方法。
使用TaskPool处理同步任务
当调度独立的任务或者一系列任务为静态方法实现或者可以通过单例构造唯一的句柄或类对象可在不同任务线程之间使用时推荐使用TaskPool。 定义并发函数内部调用同步方法。 创建任务 Task 通过 execute() 接口执行该任务并对任务返回的结果进行操作。 执行并发操作。
模拟一个包含同步调用的单实例类。
// Handle.ts 代码
export default class Handle {static getInstance(): void {// 返回单例对象}static syncGet(): void {// 同步Get方法}static syncSet(num: number): number {// 模拟同步步骤1console.info(taskpool: this is 1st print!);// 模拟同步步骤2console.info(taskpool: this is 2nd print!);return num;}
}业务使用TaskPool调用相关同步方法的代码。
// Index.ets代码
import taskpool from ohos.taskpool;
import Handle from ./Handle; // 返回静态句柄// 步骤1: 定义并发函数内部调用同步方法
Concurrent
function func(num: number): boolean {// 调用静态类对象中实现的同步等待调用Handle.syncSet(num);return true;
}// 步骤2: 创建任务并执行
async function asyncGet(): Promisevoid {// 创建task并传入函数funclet task: taskpool.Task new taskpool.Task(func, 1);// 执行task任务let res: boolean await taskpool.execute(task) as boolean;// 打印任务结果console.info(taskpool: task res is: res);
}Entry
Component
struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {// 步骤3: 执行并发操作asyncGet();})}.width(100%).height(100%)}}
}使用Worker处理关联的同步任务
当一系列同步任务需要使用同一个句柄调度或者需要依赖某个类对象调度无法在不同任务池之间共享时需要使用Worker。
在主线程中创建Worker对象同时接收Worker线程发送回来的消息。
import worker from ohos.worker;Entry
Component
struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {let w: worker.ThreadWorker new worker.ThreadWorker(entry/ets/workers/MyWorker.ts);w.onmessage (): void {// 接收Worker子线程的结果}w.onerror (): void {// 接收Worker子线程的错误信息}// 向Worker子线程发送Set消息w.postMessage({type: 0, data: data})// 向Worker子线程发送Get消息w.postMessage({type: 1})// ...// 根据实际业务选择时机以销毁线程w.terminate()})}.width(100%)}.height(100%)}
}在Worker线程中绑定Worker对象同时处理同步任务逻辑。
// handle.ts代码
export default class Handle {syncGet() {return;}syncSet(num: number) {return;}
}// MyWorker.ts代码
import worker, { ThreadWorkerGlobalScope, MessageEvents } from ohos.worker;
import Handle from ./handle // 返回句柄let workerPort : ThreadWorkerGlobalScope worker.workerPort;// 无法传输的句柄所有操作依赖此句柄
let handler: Handle new Handle()// Worker线程的onmessage逻辑
workerPort.onmessage (e : MessageEvents): void {switch (e.data.type as number) {case 0:handler.syncSet(e.data.data);workerPort.postMessage(success set);case 1:handler.syncGet();workerPort.postMessage(success get);}
}为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙开发学习手册》
如何快速入门https://qr21.cn/FV7h05
基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 鸿蒙开发面试真题含参考答案https://qr18.cn/F781PH 鸿蒙开发面试大盘集篇共计319页https://qr18.cn/F781PH
1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向