Kotlin 协程(Coroutines)是 Kotlin 提供的一种轻量级并发与异步编程机制,用来简化线程管理、避免回调地狱,并让异步代码写起来像同步代码一样直观。
下面从概念、原理、关键特性和示例几个角度说清楚。
一句话:
协程是“用户态的轻量线程”,由 Kotlin 自己调度,而不是操作系统调度
传统方式的问题:
协程解决的问题:
✅ 写异步代码像写同步代码
✅ 自动线程切换
✅ 轻量、可取消、可组合
协程最关键的能力是 挂起函数(suspend function)
suspend fun fetchData(): String {
delay(1000) // 不阻塞线程
return "data"
}
suspend 表示“我可以暂停,但不阻塞线程”决定协程跑在哪个线程:
| Dispatcher | 用途 |
|---|---|
Dispatchers.Main |
UI 线程(Android) |
Dispatchers.IO |
网络、数据库 |
Dispatchers.Default |
CPU 密集计算 |
Dispatchers.Unconfined |
不指定线程 |
控制协程的生命周期:
lifecycleScope.launch { }
viewModelScope.launch { }
GlobalScope.launch { } // 不推荐
作用域取消 → 里面所有协程自动取消
常用启动方式:
launch { } // 不返回结果
async { } // 返回 Deferred(可 await)
runBlocking { } // 阻塞当前线程(测试用)
fun main() = runBlocking {
launch(Dispatchers.IO) {
val data = fetchData()
println(data)
}
println("done")
}
suspend fun fetchData(): String {
delay(1000)
return "Hello Coroutine"
}
执行特点:
| 对比项 | 线程 | 协程 |
|---|---|---|
| 创建成本 | 高 | 极低 |
| 数量 | 几百 | 几万 |
| 切换 | 内核态 | 用户态 |
| 编程模型 | 回调 / Future | 同步风格 |
Kotlin 协程是一种用“挂起 + 调度”实现的轻量级异步编程模型,让你用同步的写法完成并发任务。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。