You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin协程是否线程安全?示例代码安全性分析

这段代码是线程安全的

先看你给出的代码:

fun myFun() {
    GlobalScope.launch {
        val state = mutableSetOf<Int>()

        for(x in 1..100) {
            // do something
            delay(100)
            // update state after delay resume
            state.add(x)
        }
    }
}

核心原因:

  • 尽管delay会让协程挂起,恢复时可能切换到Dispatchers.Default里的其他线程,但同一个协程的代码是串行执行的——同一时间只有一个线程在跑这个协程的逻辑,不会出现多个线程同时操作state的情况。
  • mutableSetOf<Int>本身不是线程安全集合,但它是当前协程的局部变量,仅被这一个协程持有和修改,没有其他协程或线程能同时访问它。
  • 循环中的每一次state.add(x),都必须等前一轮循环的delay完成、协程恢复执行后才会触发,不存在并发修改的场景。

额外说明:

只有当state被暴露给其他协程或线程,或者被多个协程共享时,才会引发线程安全问题,但就当前给出的代码而言,不存在这类风险。

内容的提问来源于stack exchange,提问作者tiki taka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:44:52