openharmony 鸿蒙 sendable-freeze

2025-06-12 浏览 (1)

Sendable对象冻结

Sendable对象支持冻结操作,冻结后的对象变成只读对象,不能增删改属性,因此在多个并发实例间访问均不需要加锁,可以通过调用Object.freeze接口冻结对象。

说明:

不支持在.ets文件中使用Object.freeze接口。

使用示例

  1. 提供ts文件封装Object.freeze方法。

    // helper.ts
    export function freezeObj(obj: any) {
      Object.freeze(obj);
    }
    
  2. 调用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%')
      }
    }
    
  3. 子线程不加锁直接操作对象。

    // 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对象
    }
    

你可能感兴趣的鸿蒙文章

harmony 鸿蒙ArkTS(方舟编程语言)

harmony 鸿蒙在build-profile.json5中配置arkOptions

harmony 鸿蒙异步锁

harmony 鸿蒙方舟字节码文件格式

harmony 鸿蒙方舟字节码函数命名规则

harmony 鸿蒙方舟字节码基本原理

harmony 鸿蒙方舟字节码概述

harmony 鸿蒙共享容器

harmony 鸿蒙异步等待

harmony 鸿蒙ArkTS跨语言交互

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/jaqvfN