Kotlin 协程基础 01:启动第一个协程

本篇文档解析 example-basic-01.kt,介绍协程的最基本启动方式和核心概念。

1. 核心组件解析

runBlocking

  • 作用:连接“普通世界”与“协程世界”的桥梁。
  • 特性:它会阻塞当前执行它的线程,直到其内部所有的协程任务执行完毕。
  • 使用场景:通常用于 main 函数、单元测试,或将阻塞式 API 与协程代码衔接。

launch

  • 作用:启动一个新的协程,但不等待其结果。
  • 返回值:返回一个 Job 对象(在后续章节详细讨论)。
  • 特性:它是“发射后不管”的模式。

delay

  • 作用:非阻塞式的挂起函数。
  • 特性:它会让当前协程暂停执行一段时间,但不会阻塞底层线程。在等待期间,线程可以去执行其他协程。

2. 代码执行流程

1
2
3
4
5
6
7
fun main() = runBlocking {
launch {
delay(1000L) // 协程挂起,释放线程
println("World!")
}
println("Hello") // 线程立即执行这一行
}
  1. runBlocking 启动,阻塞主线程。
  2. launch 启动一个子协程,准备延迟 1 秒。
  3. 主流程不等待 launch,直接打印 Hello
  4. 1 秒后,子协程恢复执行,打印 **World!**。
  5. 所有任务完成,runBlocking 结束,程序退出。

3. 开发者感悟

runBlocking 就像是一个特殊的容器,它告诉线程:“在我里面的事情没干完之前,你不准走。”而 launch 则是容器里的一个小工,它在后台干活,不影响容器里的主进度。

,