多线程(1)

来源:互联网 发布:网络扎金花 编辑:程序博客网 时间:2024/05/22 07:00

要了解线程,首先必须知道进程。

进程是指运行中的程序,每一个进程都会有自己独立的内存空间,一个应用程序可以同时启动多个进程,就像我们打开IE浏览器一样,也可以打开任务管理器里查看进程。同样每次执行JDK的java.xe程序,就会启动一个独立的虚拟机进程,该进程的任务就是解析并执行Java程序代码。

线程是指进程中的一个执行流程(执行情景)。一个线程可以有多个线程组成,即在一个进程中可以同时运行多个不同的线程。当线程内多个线程同时运行时,这种运行方式叫做并发运行。

线程与进程的主要区别:每个进程都需要操作系统为其分配独立的内存地址空间,而同一个进程中的所有线程都在同一块内存空间中工作,这些线程可以共享同意亏啊内存和系统资源。比如多个线程共同操作一个对象。


Java线程运行机制

在Java虚拟机进程中,执行程序代码的任务是由线程来完成的,每个线程都有一个独立的程序计数器和方法调用栈

程序计数器:也称PC寄存器,当线程执行一个方法时,程序计数器指向方法区中吓一跳要指向的字节码指令。

方法调用栈:简称方法栈,用来跟踪线程运行中一系列的方法调用过程,栈中的元素叫做

栈帧:每当一个线程调用一个方法的时候,就会向方法栈中压入一个新帧


栈帧主要3部分:

局部变量区:存放局部变量和方法参数

操作数栈:是线程的工作区,用来存放运算过程中生成的临时数据。

栈数据区:为线程执行命令提供相关的信息,包括如何定位到位于堆区和方法区的特定数据,级如何正常退出或者异常中断方法。


每当用java命令启动一个Java虚拟机进程的时候。Java虚拟机都会创建一个主线程

看下面Sample例子

public class Sample {private int a;//实例变量public int method(){int b = 0;//局部变量a++;b =a ;return b;}public static void main(String[] args) {int a = 0;//局部变量Sample sample = new Sample();//局部变量a = sample.method();System.out.println(a);}}



1)当主线程执行“a++”操作时,根据method()方法的栈帧的栈数据区中有关信息,正确地定位到队伍的Sample对象的实例变量a,并把a的值加1。

2)当method()方法执行完毕后,它的栈帧会冲方法栈中弹出,它的局部变量b结束生命周期。mian()方法称为栈帧当前帧,主线程继续执行main()方法。

可以看出方法区存放了线程所执行的字节码指令,队伍存放了线程所操作的数据(以对象的形式),Java栈区则是线程的工作区,保存线程的运行状态。



原创粉丝点击