Kotlin 协程基础 05:Job 与生命周期控制

本篇文档解析 example-basic-05.kt,探讨如何通过 Job 对象显式管理协程的执行顺序。

1. 核心概念:什么是 Job?

当调用 launch 启动一个协程时,它会返回一个 Job 对象。它是协程的句柄,用于控制协程的生命周期。

代码解析

1
2
3
4
5
6
7
val job = launch { 
delay(1000L)
println("World!")
}
println("Hello")
job.join() // 挂起并等待子协程完成
println("Done")
  • 异步运行launch 启动后立即返回,执行 println("Hello")
  • join() 的作用join() 会将当前协程(即 main)挂起,直到该 job 内部的逻辑(即 World!)完成。它确保了后续的 println("Done") 一定在 World! 之后打印。

2. 深入理解:Join 的本质

  • 语义理解join 的意思是“加入”。你可以理解为将 join() 之后的代码块“加入”到该 job 的任务流末端。
  • 非阻塞挂起job.join() 是一个挂起函数。它不会阻塞线程(CPU 仍可去处理其他事情),它只是暂停了当前协程的执行流程,等待 job 的信号。

3. 开发者总结

  1. launch 负责“启动”任务。
  2. Job 负责“管理”任务。
  3. join() 负责“同步”异步任务,使异步流程表现得像同步流程一样。
,