仓颉开发之——多线程(15)

一 概述

  • 并发概念
  • 创建线程
  • 访问线程
  • 终止线程
  • 同步机制

二 并发概念

  • 1-语言线程:又叫仓颉线程、仓颉语言中的线程叫法
  • 2-native 线程:类似于其他操作系统+语言的实现线程方式

三 创建线程

3.1 概念

  • 关键字spawn+{}内的区域叫做线程

3.2 线程睡眠

  • 指定线程阻塞时长 sleep

  • 主动睡眠一段时间,之后再恢复执行

  • Duration是枚举,可为毫秒,秒等

  • func sleep(dur: Duration): Unit

3.3 示例

1
2
3
spawn { =>
sleep(100 * Duration.millisecond)
}

四 访问线程

4.1 线程属性

  • 仓颉的线程类也叫Thread
  • Thread 类主要被用于访问线程的属性信息,例如线程标识等
  • thread 无法直接被实例化构造对象

4.2 Future<T> 获取线程返回值

1-概念

  • 不使用Future接收并执行,无法保证线程的执行时机
  • 使用Future,通过spawn 表达式的返回值,来等待线程执行结束

2-API

  • get(): T
  • get(ns: Int64): Option<T>

五 终止线程

5.1 概念

  • 使用Future<T> 的 cancel() 方法向对应的线程发送终止请求
  • 使用 Thread 的 hasPendingCancellation 检查线程是否已终止

5.2 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import std.sync.SyncCounter

main(): Unit {
let syncCounter = SyncCounter(1)
let fut = spawn {
syncCounter.waitUntilZero()
// Check cancellation request
if (Thread.currentThread.hasPendingCancellation) {
println("cancelled")
return
}
println("hello")
}
fut.cancel() // Send cancellation request
syncCounter.dec()
fut.get() // Join thread
}

六 同步机制

  • 原子操作Atomic
  • 互斥锁(1-可重入互斥锁 ReentrantMutex、2-Monitor/MultiConditionMonitor、3-synchronized)
  • ThreadLocal

七 思维导图

八 参考

  • 仓颉官方文档—并发编程
  • 仓颉编程语言入门教程