# 异æ¥é” 为了解决多线程并å‘任务间的数æ®ç«žäº‰é—®é¢˜ï¼ŒArkTS引入了异æ¥é”能力。异æ¥é”å¯èƒ½ä¼šè¢«ç±»å¯¹è±¡æŒæœ‰ï¼Œå› æ¤ä¸ºäº†æ›´æ–¹ä¾¿åœ°åœ¨å¹¶å‘实例间获å–åŒä¸€ä¸ªå¼‚æ¥é”对象,[AsyncLock对象](../reference/apis-arkts/js-apis-arkts-utils.md#asynclock)支æŒè·¨çº¿ç¨‹å¼•ç”¨ä¼ 递。 由于ArkTSè¯è¨€æ”¯æŒå¼‚æ¥æ“作,阻塞é”容易产生æ»é”é—®é¢˜ï¼Œå› æ¤åœ¨ArkTSä¸ä»…支æŒå¼‚æ¥é”(éžé˜»å¡žå¼é”)。åŒæ—¶ï¼Œå¼‚æ¥é”还å¯ä»¥ç”¨äºŽä¿è¯å•çº¿ç¨‹å†…的异æ¥ä»»åŠ¡æ—¶åºä¸€è‡´æ€§ï¼Œé˜²æ¢å¼‚æ¥ä»»åŠ¡æ—¶åºä¸ç¡®å®šå¯¼è‡´çš„åŒæ¥é—®é¢˜ã€‚ 更多异æ¥é”相关接å£ï¼Œå¯è§[异æ¥é”ArkTSUtils.locks](../reference/apis-arkts/js-apis-arkts-utils.md#arktsutilslocks)。 > **说明:** > > 使用异æ¥é”的方法需è¦æ ‡è®°ä¸ºasync,调用方需è¦ä½¿ç”¨await修饰,æ‰èƒ½ä¿è¯æ—¶åºæ£ç¡®ã€‚ ## 使用示例 为了解决[@Sendable共享对象](arkts-sendable.md)在ä¸åŒçº¿ç¨‹ä¿®æ”¹å…±äº«å˜é‡å¯¼è‡´çš„竞争问题,å¯ä»¥é‡‡ç”¨å¼‚æ¥é”进行数æ®ä¿æŠ¤ã€‚示例如下: ```ts import { ArkTSUtils, taskpool } from '@kit.ArkTS'; @Sendable export class A { private count_: number = 0; lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock(); public async getCount(): Promise<number> { // 对需è¦ä¿æŠ¤çš„æ•°æ®åŠ 异æ¥é” return this.lock_.lockAsync(() => { return this.count_; }) } public async increaseCount() { // 对需è¦ä¿æŠ¤çš„æ•°æ®åŠ 异æ¥é” await this.lock_.lockAsync(() => { this.count_++; }) } } @Concurrent async function printCount(a: A) { console.info("InputModule: count is:" + await a.getCount()); } @Entry @Component struct Index { @State message: string = 'Hello World'; build() { RelativeContainer() { Text(this.message) .id('HelloWorld') .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: '__container__', align: VerticalAlign.Center }, middle: { anchor: '__container__', align: HorizontalAlign.Center } }) .onClick(async () => { // 创建sendable对象a let a: A = new A(); // 将实例aä¼ é€’ç»™å线程 await taskpool.execute(printCount, a); }) } .height('100%') .width('100%') } } ```