harmony 鸿蒙Sendable对象冻结
Sendable对象冻结
Sendable对象支持冻结操作,冻结后的对象变成只读对象,不能增删改属性,因此在多个并发实例间访问均不需要加锁,可以通过调用Object.freeze接口冻结对象。
说明:
不支持在.ets文件中使用Object.freeze接口。
使用示例
- 提供ts文件封装Object.freeze方法。
// helper.ts
export function freezeObj(obj: any) {
Object.freeze(obj);
}
- 调用freeze方法冻结对象,然后将对象发送到子线程。
// Index.ets
import { freezeObj } from './helper';
import { worker } from '@kit.ArkTS';
@Sendable
export class GlobalConfig {
// 一些配置属性与方法
init() {
// 初始化相关逻辑
freezeObj(this); // 初始化完成后冻结当前对象
}
}
@Entry
@Component
struct Index {
build() {
Column() {
Text("Sendable freezeObj Test")
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
let gConfig = new GlobalConfig();
gConfig.init();
const workerInstance = new worker.ThreadWorker('entry/ets/workers/Worker.ets', { name: "Worker1" });
workerInstance.postMessage(gConfig);
})
}
.height('100%')
.width('100%')
}
}
- 子线程不加锁直接操作对象。
// Worker.ets
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { GlobalConfig } from '../pages/Index';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
workerPort.onmessage = (e: MessageEvents) => {
let gConfig: GlobalConfig = e.data;
// 使用gConfig对象
}
你可能感兴趣的鸿蒙文章
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦