多线程(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栈区则是线程的工作区,保存线程的运行状态。
- Java多线程1(创建多线程)
- UNIX多线程编程(1) 创建多线程
- 关于Java多线程------(1,认识多线程)
- 多线程(1)
- 多线程学习(1)
- 多线程(1/2)
- 多线程(1)
- 多线程编程(1)
- linux多线程(1)
- 多线程(1)
- GCD 多线程(1)
- 多线程知识(1)
- Java多线程(1)
- 多线程浅析(1)
- 多线程(1)
- Java---多线程(1)
- JAVA多线程(1)
- JavaSE 多线程(1)
- java.lang.StackOverflowError
- python 总结(一)
- 在二维码中插入logo
- 【recyclebin】彻底禁用 Oracle回收站功能
- 第三次作业
- 多线程(1)
- 游戏制作学习资料
- Notepad++ 使用技巧之关键字高亮、自动补全
- 第四次作业 作业六
- 第四堂课后作业
- 微博系统
- 第五堂课后作业
- JAVA集合框架(一)
- LightOJ 1054 求n^m%mod