面试题答案
一键面试创建简单协程
在Kotlin中,可以使用GlobalScope.launch
或runBlocking
来创建一个简单的协程。例如:
import kotlinx.coroutines.*
fun main() = runBlocking {
// 使用GlobalScope.launch创建协程
GlobalScope.launch {
println("这是一个在后台运行的协程")
}
// 使用runBlocking创建协程,runBlocking会阻塞当前线程直到协程完成
launch {
println("这也是一个协程")
}
println("主线程继续执行")
}
协程的挂起函数
挂起函数是一种特殊的函数,它可以暂停协程的执行,并将控制权交回给调用者,直到某个条件满足时再恢复执行。挂起函数必须在协程或另一个挂起函数内部调用。例如delay
函数就是一个挂起函数:
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
println("开始延迟")
delay(2000) // 暂停协程2秒
println("延迟结束")
}
}
在协程中处理异常
- 使用try - catch块:在协程内部可以使用常规的
try - catch
块来捕获异常。
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
try {
throw Exception("模拟异常")
} catch (e: Exception) {
println("捕获到异常: ${e.message}")
}
}
}
- 使用CoroutineExceptionHandler:可以创建一个
CoroutineExceptionHandler
并将其传递给GlobalScope.launch
或其他协程构建器来处理未捕获的异常。
import kotlinx.coroutines.*
val handler = CoroutineExceptionHandler { _, exception ->
println("全局捕获到异常: ${exception.message}")
}
fun main() = runBlocking {
GlobalScope.launch(handler) {
throw Exception("模拟异常")
}
delay(1000)
}