MST

星途 面试题库

面试题:Kotlin协程中挂起函数与通道的基础使用

请描述Kotlin协程中挂起函数的定义方式,以及通道(Channel)在协程间数据传递中的作用。并编写一段简单代码,使用挂起函数和通道实现两个协程之间的数据传递,一个协程向通道发送数据,另一个协程从通道接收数据。
21.9万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

1. 挂起函数的定义方式

在Kotlin协程中,挂起函数是一种特殊的函数,它可以暂停协程的执行,并且只有在满足特定条件时才会恢复执行。挂起函数需要在其定义前加上 suspend 关键字。例如:

suspend fun someSuspendingFunction() {
    // 函数体
}

挂起函数只能在协程内部或者其他挂起函数内部调用。

2. 通道(Channel)在协程间数据传递中的作用

通道(Channel)在Kotlin协程间数据传递中起到桥梁的作用。它可以让一个协程发送数据,同时另一个协程接收数据,实现协程间的异步数据传输。Channel 具有阻塞和非阻塞的特性,发送方和接收方可以根据需要暂停或继续执行,从而实现高效的数据传递和协同工作。

3. 代码示例

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel

fun main() = runBlocking {
    val channel = Channel<Int>()

    launch {
        // 发送数据的协程
        for (i in 1..5) {
            channel.send(i)
            println("Sent: $i")
            delay(1000)
        }
        channel.close()
    }

    launch {
        // 接收数据的协程
        for (data in channel) {
            println("Received: $data")
        }
    }
}

在上述代码中:

  • 首先创建了一个 Channel 实例 channel 用于数据传递。
  • 第一个 launch 启动的协程通过 channel.send(i) 向通道发送数据,并在每次发送后打印发送的内容,且延迟1秒。发送完毕后关闭通道。
  • 第二个 launch 启动的协程通过 for (data in channel) 从通道接收数据,每当接收到数据时打印接收的内容。当通道关闭时,for 循环终止。