运行.NET Thread类官方多线程示例未获交错输出,求助原因
线程输出未交错的原因及验证方法
首先明确:操作系统的线程调度是不确定的,微软文档里的示例输出只是并发执行的一种可能结果,并非必然会出现的固定输出。
你遇到的情况核心原因是:主线程的4次"Do some work"执行耗时极短——现代CPU执行速度远超预期,主线程在启动子线程后,几乎瞬间就完成了这4次循环,紧接着调用Join()方法进入等待子线程结束的状态。整个过程中,操作系统还没来得及调度子线程运行,主线程就已经进入等待,所以子线程的输出会集中在一起,不会和主线程的输出交错。
这种现象和CPU架构(M1或Intel)、核心数无关,只要主线程代码执行足够快,就会出现类似结果。
验证方法:让主线程主动让出CPU
如果想看到线程输出交错的效果,可在主线程的循环中加入短暂休眠,强制主线程让出CPU时间片,给子线程调度执行的机会:
// 主线程循环部分修改为: for (int i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work."); Thread.Sleep(10); // 休眠10毫秒,让子线程获得执行机会 }
修改后再运行,就能看到主线程和子线程的输出交错出现。
关键结论
线程的执行顺序完全由操作系统调度器决定,受当前系统负载、代码执行耗时、线程优先级等多种因素影响。文档示例只是为了展示线程并发的概念,实际运行时的输出顺序可能千差万别,这都是正常现象。
内容的提问来源于stack exchange,提问作者zappasan
相关产品推荐
相关产品推荐

