本篇文档解析 example-basic-01.kt,介绍协程的最基本启动方式和核心概念。
1. 核心组件解析
runBlocking
- 作用:连接“普通世界”与“协程世界”的桥梁。
- 特性:它会阻塞当前执行它的线程,直到其内部所有的协程任务执行完毕。
- 使用场景:通常用于
main函数、单元测试,或将阻塞式 API 与协程代码衔接。
launch
- 作用:启动一个新的协程,但不等待其结果。
- 返回值:返回一个
Job对象(在后续章节详细讨论)。 - 特性:它是“发射后不管”的模式。
delay
- 作用:非阻塞式的挂起函数。
- 特性:它会让当前协程暂停执行一段时间,但不会阻塞底层线程。在等待期间,线程可以去执行其他协程。
2. 代码执行流程
1 | fun main() = runBlocking { |
runBlocking启动,阻塞主线程。launch启动一个子协程,准备延迟 1 秒。- 主流程不等待
launch,直接打印 Hello。 - 1 秒后,子协程恢复执行,打印 **World!**。
- 所有任务完成,
runBlocking结束,程序退出。
3. 开发者感悟
runBlocking 就像是一个特殊的容器,它告诉线程:“在我里面的事情没干完之前,你不准走。”而 launch 则是容器里的一个小工,它在后台干活,不影响容器里的主进度。