Kotlin 协程:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是协程以及为什么需要它们?



协程是 Kotlin 中用于异步编程的强大工具,它允许您以命令式风格编写非阻塞代码。与传统的线程不同,协程是轻量级的:您可以在一个线程上运行数千个协程,而不会消耗大量内存。



协程的主要任务是简化异步操作的处理:网络请求、数据库读取、文件操作以及其他需要等待的任务。您无需使用复杂的回调或响应式流,而是编写顺序代码,该代码在等待期间暂停,并在操作完成后恢复执行。



协程库是 Kotlin 生态系统的一部分,并由 JetBrains 官方支持。它广泛用于 Android 开发、服务器端应用程序(Ktor、Spring WebFlux)甚至桌面应用程序中。



安装协程



由于协程不是通过 pip 或 npm 安装的独立库,而是 Kotlin 生态系统的一部分,因此其引入方式取决于您的构建管理器。



Gradle(Kotlin DSL)

dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")    // 用于 Android 或使用 Dispatchers.Main    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")}


Gradle(Groovy DSL)

dependencies {    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'}


Maven

<dependency>    <groupId>org.jetbrains.kotlinx</groupId>    <artifactId>kotlinx-coroutines-core</artifactId>    <version>1.9.0</version></dependency>


快速入门:第一个示例



让我们编写一个简单的程序,启动一个协程,暂停并输出一条消息:



import kotlinx.coroutines.*

fun main() = runBlocking { println("程序开始:${Thread.currentThread().name}") launch { delay(1000L) // 暂停协程 1 秒(不阻塞线程) println("世界!(来自协程:${Thread.currentThread().name})") } println("你好,(来自 main:${Thread.currentThread().name})") delay(500L) // 等待,以便协程有机会执行 println("程序结束")}


输出:

程序开始:main @coroutine#1你好,(来自 main:@coroutine#1)世界!(来自协程:@coroutine#2)程序结束


请注意:delay() 不会阻塞线程,而只会暂停当前协程。main 线程仍然可以自由处理其他任务。



协程的主要方法和函数



1. runBlocking

作用: 启动一个新的协程并阻塞当前线程直到其完成。用作普通同步代码与协程世界之间的桥梁(通常在 main 函数或测试中使用)。

参数:

  • context: CoroutineContext — 协程上下文(默认为 EmptyCoroutineContext)
  • block: suspend CoroutineScope.() -> T — 将要执行的挂起代码块

示例:

fun main() {    val result = runBlocking {        delay(1000L)        "完成!"    }    println(result) // 输出:完成!}


2. launch

作用: 启动一个不返回结果的新协程(即“发射后不管”模式)。返回一个 Job 对象,可用于取消或等待。

参数:

  • context: CoroutineContext

推荐