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

print操作归属疑问:主线程还是后台线程?

关于print操作的线程归属问题

其实这个问题真的不算基础,不少刚接触多线程开发的朋友都会有类似困惑,我来给你理清楚:

首先明确结论:print 操作本身并没有固定绑定主线程或后台线程,它会在调用它的那个线程上执行。

回到你的测试代码:

Webservice().loadHeadlinesForSource(source: source) { headlines in
    print("background print") // 这里的print运行在Web服务回调所在的后台线程
    self.headlineViewModels = headlines.map(HeadlineViewModel.init)
    DispatchQueue.main.async {
        print("main thread print") // 这里的print运行在主线程
        completion()
    }
}

你看到两个print都成功输出,本质原因是:

  • 第一个print是在Web服务的回调闭包里执行的,这类网络请求的回调通常默认在后台线程(除非服务内部特意切换到主线程),所以它属于后台线程操作;
  • 第二个print被放在DispatchQueue.main.async的闭包里,这个闭包会被系统调度到主线程执行,所以它就属于主线程操作。

额外补充两个关键点:

  • print是线程安全的API,不管你在哪个线程调用它,都不会出现多线程冲突问题(内部已经做了同步处理);
  • 要区分UI操作和普通操作:像更新UI这类操作必须在主线程执行,但print只是向控制台输出文本,不属于UI范畴,所以没有线程限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:57