协程基础
协程概念、launch/runBlocking、suspend 挂起函数、调度器
协程基础
协程是 Kotlin 的轻量级线程——一个线程可以运行成千上万个协程。
学完本章你将: 掌握协程概念、launch/runBlocking、suspend、调度器。
第一个协程
kotlin
import kotlinx.coroutines.*
fun main() = runBlocking { // 桥接——协程世界入口
launch { // 启动新协程
delay(1000) // 挂起——不阻塞线程
println("World!")
}
println("Hello,")
// Hello, → (1秒后) → World!
}
suspend 挂起函数
kotlin
suspend fun fetchUser(id: Int): String {
delay(500) // 模拟网络请求
return "User $id"
}
// 只能在协程或其他 suspend 函数中调用
fun main() = runBlocking {
val user = fetchUser(1)
println(user)
}
调度器 Dispatchers
kotlin
launch(Dispatchers.Default) { } // CPU 密集型
launch(Dispatchers.IO) { } // 网络/磁盘 IO
launch(Dispatchers.Main) { } // Android UI 线程
launch(Dispatchers.Unconfined) { } // 不限制
协程 vs 线程
kotlin
// 线程——昂贵(~1MB 栈内存)
repeat(10_000) {
thread { Thread.sleep(1000) } // 可能 OOM
}
// 协程——轻量(~几 KB)
runBlocking {
repeat(10_000) {
launch { delay(1000) } // 轻松运行
}
}