线程运行的内存图
话不多说,看以下两部分代码
public class ThreadTest { public static void main(String[] args) { //创建并开启线程 new MyThread().start(); //循环遍历 for(int i=0;i<100;i++) { System.out.println("main"+ i ); } } }
public class MyThread extends Thread{ public void run() { //遍历0-99 for(int i=0;i<100;i++) { System.out.println(this.getName() + i); } } }
>接着我们运行main方法,控制台打印一部分结果如下:
现在我们可以得出一些结论:
1.main主线程在执行start()方法时会开启一条新的线程,而这条线程专门来运行run方法,不会去执行main里的代码块
2.main主线程执行start()后不需要等待开启的线程执行完run(),会一直往下执行
3.线程间的执行任务是互不干扰的
那这个过程中,线程的内存图是怎么样的呢?如图:
当执行start后,run不会进入main所在的栈内存的,因为这样会导致一个问题,先进去的方法是后出来的,所以会存在先执行run,后执行run后面的main代码,这样就不是多线程同时执行了。
而看到这个图,可以发现每当开启一条线程,在JVM内存中,会单独为每条线程开辟一块栈内存用于使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~