Java面试问题之三十一
请谈谈Java线程的运行机制。
答:在Java虚拟机进程中,执行程序代码任务是由线程来完成的。每个线程都有一个独立的程序计数器和方法调用栈(method invocation stack)。
(1)程序计数器:也称为PC寄存器,当线程执行一个方法时,程序计数器指向方法区中下一个要执行的字节码指令。
(2)方法调用栈:简称方法栈,用来跟踪程序运行中一系列方法调用过程,栈中的元素称为栈帧。每当线程调用一个方法的时候,就会向方法栈压入一个新帧。帧用来存储方法的参数、局部变量和运算过程中的临时数据。
栈帧主要由三个部分组成:
* 局部变量:存放局部变量和方法参数。
* 操作数栈:是线程的工作区,用来存放运算过程中生成的临时数据。
* 栈数据区:为线程执行指令提供相关的信息,包括如何定位到位于堆区和方法区的特定数据,以及如何正常退出方法或者异常中断方法。
每当用java命令启动一个Java虚拟机进程时,Java虚拟机都会创建一个主线程,该线程从程序入口main()方法开始执行。