![](https://img-blog.csdnimg.cn/img_convert/67a08c1db9c3e52d9d87df1f9e5f38b6.png)
一条线程是如何执行的呢
一条线程它有自己独立的栈和pc寄存器,寄存器的作用来存储字节码指令地址,它来告诉电脑要执行的下一条指令。
我们通过main方法反编译出来的代码,来详细的探究main线程执行方法中代码的具体过程:
![](https://img-blog.csdnimg.cn/img_convert/7c1346bf6fb4c164bc5a3c6d3aa127f9.png)
反编译出来的代码
开始执行:bipush 15
表示把15压入操作数栈中
![](https://img-blog.csdnimg.cn/img_convert/c9b5efdfdcac87f637be307f3e7d3f5d.png)
执行 istore_1
表示把把操作数栈中的15拿出来,然后存入局部变量表1的位置
![](https://img-blog.csdnimg.cn/img_convert/4bb307ad0c85f692dbe362557a854a2b.png)
执行bipush 8 以及 istore_2 同上
都是把先把8放入操作数栈,然后拿出来存到局部变量表
![](https://img-blog.csdnimg.cn/img_convert/3825f81c7b31afb8e498d974d3ce43e0.png)
执行 iload_1
表示把局部变量表中1位置的数据拿出来,放到操作数栈中
这个注意,拿出来并不会清空局部变量表1位置的数据,而是方法执行完才会清除
![](https://img-blog.csdnimg.cn/img_convert/5fcf9853454361d0ca1b12e542ea0e92.png)
执行 iload_2
表示把局部变量表中2位置的数据拿出来,压到到操作数栈中
![](https://img-blog.csdnimg.cn/img_convert/a98d1a00be2985980ee17bc1faf1fcf6.png)
执行 iadd
表示执行+操作,然后在操作数栈中得到23
![](https://img-blog.csdnimg.cn/img_convert/4bfde455f48ec68a328c98582b2c14c8.png)
执行 istore_3
表示将操作数栈中的23拿出来,存放的局部变量表3的位置
![](https://img-blog.csdnimg.cn/img_convert/7774f7fcfdd0125f057fdf81d3619c47.png)
最后执行 return
表示方法结束,销毁栈