Z
ZHANK

协程基础

协程概念、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) }      // 轻松运行
    }
}