Skip to content
阅读进度

Kotlin 协程与 Java 并发如何对应? ​

返回 Java 与并发 目录

标准回答 ​

协程挂起可以保存执行状态并让出线程,但调用阻塞 API 或长计算仍会占用实际线程。Dispatcher 决定调度环境,不能把 suspend 关键字当作自动 I/O 或线程切换。Java Executor / Future 与协程都需要并发预算和取消协议。

结构化并发让子任务归属某个作用域,父任务取消可传播。任务要在挂起点或主动检查处响应取消,资源用 finally 等机制释放;吞掉取消异常可能让已经失效的工作继续运行。Supervisor 的失败隔离也不意味着所有错误可以忽略。

Android 中选择与页面或业务任务匹配的作用域,UI 更新在适当线程完成。协程切换不能代替服务端幂等,超时也不证明远端副作用停止。已有 Java 经验可以沿所有权、等待、可见性和取消四个概念迁移。

追问与回答 ​

launch 和 async 的区别在哪里 ​

前者返回 Job 表达生命周期,后者返回可 await 的 Deferred 结果;异常传播仍与作用域和父子关系有关,不应仅理解为是否返回值。

并行两个请求是否都用 async 就够 ​

还需定义失败时是否取消另一支、总体期限、最大并发和结果使用条件,避免创建后无人等待的任务。

易混淆点 ​

  • 把挂起函数看成一定不会阻塞调用线程。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。