Java中for循环实现多线程的运行逻辑疑问
为什么这个for循环能实现多线程并发执行?
先看你给出的代码:
for(int i = 0; i < 5; i++) { MultithreadThing myThing = new MultithreadThing(); myThing.start(); }
你理解的误区核心在于**Thread.start()方法的本质**:它不是让当前的主线程停下来等待新线程执行完毕,而是向JVM和操作系统发出一个信号——"这个线程已经就绪,把它加入调度队列,轮到它的时候就分配CPU资源执行"。
实际运行流程是这样的:
- 主线程进入循环,创建一个
MultithreadThing线程对象 - 调用
start()后,主线程不会阻塞等待,直接回到for循环开始下一次迭代,继续创建并启动下一个线程 - 与此同时,操作系统会根据CPU的调度策略,轮流给这些已经就绪的线程分配CPU时间片,让它们并发/并行执行
简单说,start()是"启动线程让它准备好运行",而不是"启动线程并等它跑完"。
如果想要达到你原本以为的顺序执行(创建→运行完毕→下一次循环),需要调用Thread.join()方法,让主线程等待当前线程执行完成:
for(int i = 0; i < 5; i++) { MultithreadThing myThing = new MultithreadThing(); myThing.start(); myThing.join(); // 主线程阻塞,直到该线程执行结束才继续循环 }
内容的提问来源于stack exchange,提问作者WaterClock
相关产品推荐
相关产品推荐

