CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kotlin 语言入门/课时/协程
RawBlame
课时目录12 节

Kotlin 语言入门

  1. 01Kotlin 是什么
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与 Lambda
  5. 05集合 API
  6. 06类与 OOP
  7. 07空安全
  8. 08协程
  9. 09JVM 与 Spring
  10. 10Android 与 Compose
  11. 11Ktor 服务端
  12. 12综合练习

协程

suspend、Flow、结构化并发。

40 分钟

协程

Kotlin 协程是轻量级并发模型:suspend 函数可挂起不阻塞线程,Flow 处理异步数据流,结构化并发保证子任务生命周期可控。

学习目标

  • 理解 suspend 函数与协程的基本启动方式
  • 掌握 async/await、Flow 与 collect
  • 了解结构化并发与 CoroutineScope

suspend 与 launch

import kotlinx.coroutines.*

suspend fun fetchLesson(slug: String): String {
    delay(100)   // 挂起,不阻塞线程
    return "Lesson: $slug"
}

fun main() = runBlocking {
    val job = launch {
        val result = fetchLesson("kt-intro")
        println(result)
    }
    job.join()
    println("完成")
}

suspend 函数只能在协程或其他 suspend 函数中调用;delay 替代 Thread.sleep。

async 与并发

import kotlinx.coroutines.*

suspend fun fetchTitle(slug: String): String {
    delay(50)
    return slug.replace("-", " ").replaceFirstChar { it.uppercase() }
}

fun main() = runBlocking {
    val slugs = listOf("kt-intro", "kt-syntax", "kt-control")

    val deferred = slugs.map { slug ->
        async { fetchTitle(slug) }
    }
    val titles = deferred.awaitAll()
    println(titles)
}

async 返回 Deferred,await() 获取结果;适合并行 IO 或计算。

Flow 数据流

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun lessonFlow(): Flow<String> = flow {
    listOf("kt-intro", "kt-syntax", "kt-control").forEach { slug ->
        delay(30)
        emit(slug)
    }
}

fun main() = runBlocking {
    lessonFlow()
        .filter { it.startsWith("kt-") }
        .map { it.uppercase() }
        .collect { println(it) }
}

Flow 类似冷流,类似 RxJava / Java Stream 的 lazy 异步序列;collect 终端消费。

结构化并发

import kotlinx.coroutines.*

fun main() = runBlocking {
    coroutineScope {
        launch {
            delay(200)
            println("任务 A")
        }
        launch {
            delay(100)
            println("任务 B")
        }
    }
    println("scope 内所有任务完成")
}

coroutineScope 等待所有子协程完成;父协程取消时子协程一并取消,避免泄漏。

与 Java 对照

Kotlin
Java
suspend fun + 协程CompletableFuture / Virtual Thread
launch / asyncExecutorService.submit
FlowStream / Reactive Streams
coroutineScopeExecutorService.invokeAll + shutdown
delayThread.sleep / LockSupport.park

Spring Boot 3.2+ 支持 @CoroutineScope 与 suspend Controller,见下一课 JVM 集成。

练习

  • 用 async 并发获取 3 个 slug 的 title,合并打印
  • 写 Flow<Int> 发射 1–5,map 平方后 collect
  • 对比 Java CompletableFuture.allOf 与 Kotlin async/awaitAll

小结

suspend + Flow + 结构化并发是 Kotlin 异步编程三件套。 下一课 JVM 与 Spring。见 kotlin-essentials。

加载本节练习…
← 上一课空安全下一课 →JVM 与 Spring