面试题答案
一键面试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
循环终止。