在Java虚拟机进程中,每个线程都会拥有一个方法调用栈(线程栈),用来跟踪线程运行中

的一系列方法调用过程,栈中的每一个元素被称为栈帧,每当线程调用一个方法的时候会

向方法栈中压入一个新帧。这里的帧用来存储方法的参数、局部变量、方法的返回地址、

和运算过程中的临时数据。

 

线程栈模型是理解线程调度原理以及线程执行过程的基础。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶,线程栈的内容是随着线程的运行状态变化而变化的,研究线程栈必须选择一个运行的时刻(指代码运行到什么地方)

上图中的栈A是主线程main的运行栈信息,当执行new JavaThreadDemo().threadMethod();方法时,threadMethod方法位于主线程栈中的栈顶,在threadMethod方法中运行的start()方法新建立了一个线程,此时,新建立的线程也将拥有自己的线程栈B,可以看到在不同运行时刻栈的信息在发生变化,栈A的变化可以从上图中看出来。此时栈A和栈B并行运行,main线程和新建立的线程并行运行。

由此可以看出方法调用和线程启动的区别。方法调用只是在原来的线程栈中调用方法的代码,而线程启动会新建立一个独属于自己的线程栈来运行自己的这个线程。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐