基于 Cangjie(仓颉)编程语言 的 HarmonyOS 多线程 I/O 实践示例。
本示例对应华为开发者文档:多线程IO
本应用演示了在 Cangjie 语言中使用 多线程 进行文件读写和数据库操作的完整流程。通过 ArkUI 构建交互界面,让用户直观体验多线程在 I/O 密集型任务和 CPU 密集型任务中的不同表现。
核心目标:
- 理解 Cangjie 中
Thread模型的使用方法 - 掌握 I/O 密集型任务(文件读写、数据库写入)的多线程优化
- 对比 CPU 密集型任务的多线程表现
- 实践 ArkUI 与 Cangjie 后端线程的协作
- 写文件:通过子线程将数据写入本地文件,避免阻塞 UI 线程
- 读文件:通过子线程读取本地文件内容
- 写数据库:通过子线程向 SQLite 数据库写入数据
- 实时显示线程执行状态和耗时
- 通过子线程执行高计算量操作
- 对比单线程与多线程的执行效率差异
entry/src/main/cangjie/
├── index.cj # 主界面 UI(Tabs 切换 IO / CPU 任务)
├── main_ability.cj # Ability 生命周期管理
├── ability_stage.cj # Stage 配置
├── constants/
│ └── CommonConstants.cj # 公共常量定义
├── global/
│ └── Global.cj # 全局状态管理
└── utils/
├── FileUtils.cj # 文件读写工具类(多线程实现)
└── DatabaseUtils.cj # 数据库操作工具类(多线程实现)
| 模块 | 文件 | 功能 |
|---|---|---|
| UI 层 | index.cj |
ArkUI 页面,使用 Tabs 组件切换任务类型,展示执行状态和结果 |
| 文件 I/O | utils/FileUtils.cj |
封装 Thread 实现文件异步读写,含进度反馈 |
| 数据库 | utils/DatabaseUtils.cj |
封装 Thread 实现数据库异步写入 |
| 常量 | constants/CommonConstants.cj |
线程数、文件路径、数据库配置等 |
| 全局 | global/Global.cj |
跨页面共享状态(线程状态、执行结果) |
使用 Cangjie 标准库 std.thread 提供的 Thread 类:
// 示例:异步写入文件
func writeToFile(content: String, filePath: String): Unit {
let thread = Thread() {
// 在子线程中执行文件写入
let file = File(filePath, OpenMode.WRITE)
file.write(content)
file.close()
}
thread.start()
}- 使用
Tabs+TabContent实现任务类型切换 - 使用
Button触发异步任务 - 使用
TextArea展示执行结果 - 使用
LoadingProgress显示加载状态
使用 HarmonyOS 内置关系型数据库(relationalStore),在子线程中执行插入操作,避免阻塞 UI。
- HarmonyOS SDK 5.0+(API 12+)
- Cangjie 编译器(请参考 仓颉语言官方指南)
- DevEco Studio NEXT(推荐)
# 使用 DevEco Studio 打开项目根目录
# 选择目标设备(模拟器或真机)
# 点击运行或通过命令行:
# 确保已配置 HarmonyOS 开发环境
hvigorw assembleHap
hdc install ./entry/build/default/output/default/entry-default.hap本项目仅供学习参考,代码基于 HarmonyOS / Cangjie 开源许可协议。