先说清楚:这门课不是给所有人准备的

Kotlin 协程的门槛不在语法,而在脑子里的模型。如果你连 suspend 函数长什么样都没见过,或者写 Android 时习惯用 Thread 和 Handler 处理异步,那这门课的前几讲会反复卡住你——这不是课的问题,是协程本身就需要你先接受一套新的思维方式。建议先确认自己写过至少一个能跑起来的 Kotlin 项目,哪怕只是个小工具,否则前两周大概率是在硬背概念。

反过来,如果你已经能用 launch 和 async 写点东西,但遇到取消、异常传播、结构化并发就发虚,那这门课正好卡在你的痛点上。它不教你怎么装 Kotlin,直接从协程最核心的那几个概念往下走。

建议的观看顺序:不要一上来就啃调度器

很多人学协程的第一反应是去搞明白 Dispatchers 有几种、分别对应什么线程池。这个顺序是反的。建议先把讲 suspend 本质的那几讲看完,哪怕看两遍。理解「挂起不阻塞线程」这句话到底是什么意思,比记住 Default 和 IO 的区别重要得多。

接下来再进入取消与异常处理。这部分是协程真正区别于回调的地方,也是最容易写错的地方——错误地吞掉 CancellationException、在 finally 里又挂起、父子作用域互相干扰,这些问题在真实项目里非常常见。课里这一段讲得比较细,值得放慢速度。

调度器和上下文可以放到这个阶段之后再看,那时候你已经在脑子里建立起协程的基本图景,再去看线程切换的细节会顺很多。

可以跳过的部分,以及什么时候回头补

如果你做的是 Android,纯服务端场景的调度器配置那几讲可以先跳过,等真正用到再回来。反过来,如果你主要写后端,Android 生命周期相关的那部分可以快速过一遍,知道有这么回事就行,不必逐字看。

Flow 相关的章节建议不要跳。协程和 Flow 是连在一起的,只会 suspend 不会 Flow,实际写起来还是会绕回回调式的写法。但 Flow 的操作符特别多,第一遍不要试图全记住,挑 merge、flatMapLatest、catch 这几个常用的理解清楚,剩下的用到再查。

资料怎么配合练习

每讲后面的示例不要只看,敲一遍。协程的很多坑是「看的时候觉得懂了,写的时候发现根本跑不起来」。特别是取消和异常那部分,建议自己故意写几个会出错的例子,观察日志输出,比看别人总结的结论印象深得多。

课里配的笔记适合在两个时间点用:一是每看完两三讲,合上视频,对着笔记回忆一遍关键结论;二是过一两周之后,用笔记快速扫一遍,检查哪些概念已经模糊了。面试前也可以用笔记过一遍,但不要指望笔记能替代练习。

最后,如果你时间真的很碎,不要追求一次看完一讲。协程的内容密度不低,一讲拆成两三次看,每次看完写两行自己的话总结,比连着刷三小时有效。学不会的地方先标记,往前走,很多问题会在后面的章节里自然解开。


Kotlin协程完全教程-从基础实践到进阶再到专家

课程推荐

《扔物线 Kotlin协程完全教程-从基础实践到进阶再到专家》Kotlin协程完全教程-从基础实践到进阶再到专家【技能收获】学完可掌握:核心实战技能、项目驱动学习。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。

视频目录(69 节)

*   ├── 001.0-先导视频_( www.365exe.com ).mp4

*   ├── 002.1.0-学协程有用吗_( www.365exe.com ).mp4

*   ├── 003.1.1-切线程:launch()( www.365exe.com ).mp4

*   ├── 004.1.2-自动切回来:挂起函数( www.365exe.com ).mp4

*   ├── 005.1.3-Android 项目里协程代码的写法_( www.365exe.com ).mp4

*   ├── 006.1.4-withContext():手动切线程( www.365exe.com ).mp4

*   ├── 007.1.5-自定义挂起函数( www.365exe.com ).mp4

*   ├── 008.1.6-挂起函数的性能优势:从 withContext()( www.365exe.com ).mp4

*   ├── 009.1.7-消除魔法:挂起函数为什么不卡线程?( www.365exe.com ).mp4

*   ├── 010.1.8-「轻量级线程」的本质:从 delay() 说起( www.365exe.com ).mp4

*   ├── 011.1.9-结构化并发初探( www.365exe.com ).mp4

*   ├── 012.1.10-并行协程的启动和交互( www.365exe.com ).mp4

*   ├── 013.1.11-连接线程世界:和回调型 API 协作_( www.365exe.com ).mp4

*   ├── 014.1.12-回到线程世界:runBlocking()( www.365exe.com ).mp4

*   ├── 015.2.1-概念落地:「一个协程」到底指的是什么( www.365exe.com ).mp4

*   ├── 016.2.2-父子协程,以及协程间的并行和等待( www.365exe.com ).mp4

*   ├── 017.2.3-线程的强制结束:stop()( www.365exe.com ).mp4

*   ├── 018.2.4-线程的交互式结束:interrupt()( www.365exe.com ).mp4

*   ├── 019.2.5-协程的交互式取消:cancel()( www.365exe.com ).mp4

*   ├── 020.2.6-协程的结构化取消( www.365exe.com ).mp4

*   ├── 021.2.7-不配合取消:NonCancellable( www.365exe.com ).mp4

*   ├── 022.2.8-协程的结构化异常管理( www.365exe.com ).mp4

*   ├── 023.2.9-Coroutine Exception Handle( www.365exe.com ).mp4

*   ├── 024.2.10-异常的结构化管理的本质( www.365exe.com ).mp4

*   ├── 025.2.11-async() 对异常的处理_( www.365exe.com ).mp4

*   ├── 026.2.12-Supervisor Job( www.365exe.com ).mp4

*   ├── 027.3.1-Coroutine Scope _ -Context( www.365exe.com ).mp4

*   ├── 028.3.2-GlobalScope( www.365exe.com ).mp4

*   ├── 029.3.3-从挂起函数里获取 Coroutine Context( www.365exe.com ).mp4

*   ├── 030.3.4-coroutine Scope() 和 superv( www.365exe.com ).mp4

*   ├── 031.3.5-再谈 withContext()( www.365exe.com ).mp4

*   ├── 032.3.6-Coroutine Name( www.365exe.com ).mp4

*   ├── 033.3.7-Coroutine Context的加减和get()( www.365exe.com ).mp4

*   ├── 034.3.8-自定义 Coroutine Context( www.365exe.com ).mp4

*   ├── 035.4.1-Channel 和 Flow 简介与对比( www.365exe.com ).mp4

*   ├── 036.4.2-用 produce() 来提供跨协程的事件流( www.365exe.com ).mp4

*   ├── 037.4.3-Channel 的工作模式详解( www.365exe.com ).mp4

*   ├── 038.4.4-Channel API 详解( www.365exe.com ).mp4

*   ├── 039.4.5-actor():把 SendChannel 暴露出来( www.365exe.com ).mp4

*   ├── 040.4.6-Flow 的功能定位( www.365exe.com ).mp4

*   ├── 041.4.7-Flow 的工作原理和应用场景_( www.365exe.com ).mp4

*   ├── 042.4.8-Flow 的创建( www.365exe.com ).mp4

*   ├── 043.4.9-Flow 的收集( www.365exe.com ).mp4

*   ├── 044.4.10-filter() 系列操作符( www.365exe.com ).mp4

*   ├── 045.4.11-distinct UntilChanged()( www.365exe.com ).mp4

*   ├── 046.4.12-自定义 Flow 操作符( www.365exe.com ).mp4

*   ├── 047.4.13-timeout、sample、debounce()( www.365exe.com ).mp4

*   ├── 048.4.14-drop()、take() 系列操作符( www.365exe.com ).mp4

*   ├── 049.4.15-map() 系列操作符( www.365exe.com ).mp4

*   ├── 050.4.16-transform() 系列操作符( www.365exe.com ).mp4

*   ├── 051.4.17-withIndex() 操作符( www.365exe.com ).mp4

*   ├── 052.4.18-reduce()、fold() 系列操作符( www.365exe.com ).mp4

*   ├── 053.4.19-onEach() 操作符( www.365exe.com ).mp4

*   ├── 054.4.20-chunked() 操作符( www.365exe.com ).mp4

*   ├── 055.4.21-try_catch 和 Flow 的异常可见性( www.365exe.com ).mp4

*   ├── 056.4.22-catch() 操作符( www.365exe.com ).mp4

*   ├── 057.4.23-retry() 和 retryWhen() 操作符( www.365exe.com ).mp4

*   ├── 058.4.24-onStart() 等全流程监听系列操作符( www.365exe.com ).mp4

*   ├── 059.4.25-flowOn() 操作符( www.365exe.com ).mp4

*   ├── 060.4.26-buffer() 系列操作符( www.365exe.com ).mp4

*   ├── 061.4.27-多个 Flow 的合并( www.365exe.com ).mp4

*   ├── 062.4.29-SharedFlow 的效果和适用场景( www.365exe.com ).mp4

*   ├── 063.4.30-shareIn() 操作符( www.365exe.com ).mp4

*   ├── 064.4.31-Mutable Shared Flow( www.365exe.com ).mp4

*   ├── 065.4.32-StateFlow( www.365exe.com ).mp4

*   ├── 066.5.1-协程间的协作和等待( www.365exe.com ).mp4

*   ├── 067.5.2-select():先到先得_( www.365exe.com ).mp4

*   ├── 068.5.3-互斥锁和共享变量_( www.365exe.com ).mp4

*   ├── 069.5.4-ThreadLocal_( www.365exe.com ).mp4