线程学习笔记

进程是指运行中的应用程序,每个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程。
线程是指进程中的一个执行流程。一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式称为并发运行。
线程与进程的主要区别:每个进程都需要操作系统为其分配独立的内存地址空间,而统一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源。
在java虚拟机进程中,执行程序代码的任务是由线程来完成。每个线程都有一个独立的程序计数器和方法调用栈(Method Invocation Stack).
A.程序计数器:也称为PC寄存器,当线程执行一个方法时,程序计数器指向方法区中下一条要执行的字节码指令;
B.方法调用栈: 简称方法栈,用来跟踪线程运行中一系列的方法调用过程,栈中的元素称为栈帧。每当线程调用一个方法的时候,就会向方法栈压入一个新帧。帧用来存储方法的参数,局部变量和运算过程中的临时数据。
栈帧由以下3部分组成:
(1)局部变量区: 存放局部变量和方法参数;
(2)操作数栈: 是线程的工作区,用来存放运算过程中生成的临时数据;
(3)栈数据区: 为线程执行指令提供相关的信息,包括如何定位到位于堆区和方法区的特定数据,以及如何正常退出方法或者异常中断方法。
每当用java命令启动一个java虚拟机进程时,java虚拟机都会创建一个主线程,该线程从程序入口main()方法开始执行。
public class Sample {
private int a; //实例变量
public int method() {
int b = 0; //局部变量
a++;
b = a;
return b;
}

public static void main(String[] args) {
Sample s = null; //局部变量
int a = 0; //局部变量

s = new Sample();
a = s.method();
System.out.println(a);
}
}

主线程从main()方法的程序代码开始运行,当它开始执行method()方法的“a++”操作时,运行时数据区的状态如下图:

[img]http://dl.iteye.com/upload/attachment/189990/dbaedf2d-aeac-3aca-88d7-c522df2e15c7.jpg[/img]

当主线程执行“a++”操作时,它能根据method方法的栈帧的栈数据区中的有关信息,正确的定位到堆区的Sample对象的实例变量,并把它的值加1.当method方法执行完毕后,它的栈帧就会从方法栈中弹出,它的局部变量b结束生命周期,main方法栈帧称为当前帧,主线程继续执行main方法。
从上图可以看出,方法区存放了线程所执行的字节码指令,堆区存放了线程所操纵的数据(以对象的形式存放),Java栈区则是线程的工作区,保存了线程的运行状态。
另外,计算机中机器指令的真正执行者是CPU,线程必须获得CPU的使用权才能执行一条指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值