Kotlin面试题更新 2026-08-05

在 Kotlin 协程中,挂起函数是通过 suspend 关键字声明的,请解释其定义,并阐述它在协程中的执行机制。

技术原理Kotlin

考察说明

考察对 Kotlin 协程中挂起函数基本概念及其底层工作原理的理解。

回答思路

  1. 【回答框架 1】挂起函数是使用 suspend 关键字标记的函数,它可以在不阻塞线程的情况下暂停执行,并在稍后恢复。其核心特征是调用时不会阻塞当前线程,而是挂起协程。
  2. 【回答框架 2】挂起函数的工作机制依赖于状态机。编译器将每个挂起函数转换为一个状态机,每个挂起点对应一个状态。当协程挂起时,保存当前状态和局部变量;恢复时,从该状态继续执行。
  3. 【回答框架 3】挂起函数只能从协程或其他挂起函数中调用,这是编译期约束。实际的挂起和恢复由调度器控制,线程可以在此期间执行其他任务,从而提升资源利用率。
  4. 【回答框架 4】挂起函数的实现不占用额外线程,它通过在 Continuation 上传递控制权来实现非阻塞。与回调相比,挂起函数提供了顺序代码风格,避免回调地狱。
  5. 【关键点 1】挂起函数使用 suspend 修饰,可挂起而不阻塞线程。
  6. 【关键点 2】编译器将挂起函数转化为状态机,挂起点对应状态。
  7. 【关键点 3】挂起函数只能从协程或其他挂起函数中调用。
  8. 【关键点 4】挂起与恢复由调度器控制,基于 Continuation 实现。
  9. 【易错点 1】不要误以为挂起函数一定在后台线程执行,实际执行上下文由调度器决定。
  10. 【易错点 2】挂起函数不保证线程不变,恢复时可能在不同线程。
  11. 【易错点 3】挂起函数并非阻塞,而是释放线程去处理其他任务。