Kotlin 协程

预计阅读时间1 分 145 views

协程是一种轻量级的线程。与传统的线程相比,协程更加高效,因为它们是被 Kotlin 运行时管理的,不需要操作系统的线程调度。协程可以在需要时挂起并恢复,允许你编写高效的异步代码,而不会牺牲代码的简洁性。

无论是处理网络请求还是执行 I/O 操作,协程都可以让这些任务看起来像是顺序执行,而实际上却没有阻塞主线程。

创建协程

在 Kotlin 中,可以使用 launch 或 async 来创建协程。launch 用于启动一个不返回结果的协程,而 async 用于启动一个可以返回结果的协程。

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        // 这里的代码将在协程中运行
        println("Hello from coroutine!")
    }
}

启动协程

使用 launch 启动一个协程,它可以运行在不同的协程上下文中,例如 GlobalScope 或 自定义的 CoroutineScope

fun main() = runBlocking {
    GlobalScope.launch {
        delay(1000L)
        println("World!")
    }
    println("Hello,")
    delay(2000L)
}

挂起函数

挂起函数是可以暂停执行的函数,可以使用 suspend 关键字来定义。常见的挂起函数有 delaywithContext 等。

suspend fun doSomething() {
    delay(1000L)
    println("Done!")
}

协程上下文

“协程上下文”是一个包含了多个元素的数据结构,这些元素定义了协程的运行环境和行为。协程上下文包含了如调度器(决定协程在哪个线程上运行)、作业(用于取消协程)等关键组件。

调度器(Dispatchers)

调度器决定了协程应该在哪个线程或线程池上运行。Kotlin协程库提供了几个预定义的调度器:

  • Dispatchers.Default:用于CPU密集型任务的默认调度器,它使用一个固定大小的线程池。
  • Dispatchers.IO:用于IO密集型任务的调度器,如网络请求或文件读写。这个调度器使用了一个根据需要创建新线程的线程池,适合执行阻塞的IO操作。
  • Dispatchers.Main:在主线程上调度协程,通常用于Android开发中与UI交互。
fun main() = runBlocking {  
    launch(Dispatchers.IO) {  
        // 这里的代码将在 IO 线程中运行  
        println("Running in IO context")  
    }  
}

总结

Kotlin 协程为异步编程提供了简洁而强大的解决方案。通过熟练掌握协程的创建、启动、挂起函数和上下文管理,你可以在各种应用场景中编写高效且可维护的代码。

分享此文档

Kotlin 协程

或复制链接

本页目录