1# Sendable对象冻结
2
3Sendable对象支持冻结操作,冻结后的对象变成只读对象,不能增删改属性,因此在多个并发实例间访问均不需要加锁,可以通过调用[Object.freeze](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)接口冻结对象。
4
5## 使用示例
6
71. 提供ts文件封装Object.freeze方法。
8
9   ```ts
10   // helper.ts
11   export function freezeObj(obj: any) {
12     Object.freeze(obj);
13   }
14   ```
15
162. 通过调用freeze方法冻结对象,并将对象发送给子线程。
17
18   ```ts
19   // Index.ets
20   import { freezeObj } from './helper';
21   import { worker } from '@kit.ArkTS';
22
23   @Sendable
24   export class GlobalConfig {
25     // 一些配置属性与方法
26     init() {
27       // 初始化相关逻辑
28       freezeObj(this); // 初始化完成后冻结当前对象
29     }
30   }
31
32   @Entry
33   @Component
34   struct Index {
35     build() {
36       Column() {
37         Text("Sendable freezeObj Test")
38           .id('HelloWorld')
39           .fontSize(50)
40           .fontWeight(FontWeight.Bold)
41           .onClick(() => {
42             let gConifg = new GlobalConfig();
43             gConifg.init();
44             const workerInstance = new worker.ThreadWorker('entry/ets/workers/Worker.ets', { name: "Worker1" });
45             workerInstance.postMessage(gConifg);
46           })
47       }
48       .height('100%')
49       .width('100%')
50     }
51   }
52   ```
53
543. 子线程不加锁直接操作对象。
55
56   ```ts
57   // Worker.ets
58   import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
59   import { GlobalConfig } from '../pages/Index';
60
61   const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
62   workerPort.onmessage = (e: MessageEvents) => {
63     let gConfig: GlobalConfig = e.data;
64     // 使用gConfig对象
65   }
66   ```
67