ArkTSUtils.locks

为了解决多并发实例间的数据竞争问题,ArkTS语言基础库引入了异步锁能力。为了开发者的开发效率,AsyncLock对象支持跨并发实例引用传递。

由于ArkTS语言支持异步操作,阻塞锁容易产生死锁问题,因此我们在ArkTS中仅支持异步锁(非阻塞式锁)。

使用异步锁的方法需要标记为async,调用方需要await修饰调用,才能保证时序正确。因此会导致外层调用函数全部标记成async。

说明:

本模块首批接口从API version 22开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

此模块仅支持在ArkTS文件(文件后缀为.ets)中导入使用。

导入模块

import { ArkTSUtils } from '@kit.ArkTS'

ConditionVariable

实现异步等待功能的类,支持异步等待通知操作。该类使用@Sendable装饰器装饰。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

constructor

constructor()

默认构造函数。创建一个异步等待通知操作的对象。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

示例:

let conditionVariable = new ArkTSUtils.locks.ConditionVariable();

request

static request(name: string): ConditionVariable

使用指定的名称查找或创建(如果未找到)异步等待通知操作的对象。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

参数:

名称 类型 必填 说明
name string 按指定名称查找或创建等待通知操作的对象名称,字符串无特别限制。

返回值:

类型 说明
ConditionVariable 返回查找到或创建后的异步等待通知操作的实例。

示例:

let conditionVariable = ArkTSUtils.locks.ConditionVariable.request("conditionName");

wait

wait(): Promise<void>

异步调用进入等待中,将在被唤醒后继续执行。使用Promise异步回调。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

返回值:

类型 说明
Promise<void> 无返回结果的Promise对象。

示例:

const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable();
conditionVariable.wait().then(() => {
  console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志
});

waitFor

waitFor(timeout : number) : Promise<void>

异步调用进入等待中, 将在被唤醒或者等待时间结束后继续执行。使用Promise异步回调。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

参数:

名称 类型 必填 说明
timeout number 等待时间,单位为ms,正整数。

返回值:

类型 说明
Promise<void> 无返回结果的Promise对象。

示例:

const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable();
conditionVariable.waitFor(3000).then(() => {
  console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志
});

notifyAll

notifyAll() : void

通知所有等待的线程。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

示例:

const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable();
conditionVariable.waitFor(3000).then(() => {
  console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志
});
// 通知所有等待的线程。
conditionVariable.notifyAll();

notifyOne

notifyOne() : void

通知第一个等待的线程。

支持平台: Android、iOS

系统能力: SystemCapability.Utils.Lang

示例:

const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable();
conditionVariable.waitFor(3000).then(() => {
  console.info(`Thread a being awakened, then continue...`); //被唤醒后输出日志
});
// 通知第一个等待的线程。
conditionVariable.notifyOne();