Java并发编程之美 总结笔记
Java并发编程之美摘要总结
第一章 并发编程基础
1.1 什么是线程
- 线程是进程中的一个实体。
- 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,进程中多个线程共享进程的资源。
- 真正占用CPU执行的是线程,也就是说线程是CPU分配的基本单位。
- 启动main函数时,就是启动一个JVM进程,main函数所在线程(在这个进程中)叫做主线程。
进程和线程的关系
- 多个线程共享进程的堆和方法的资源
- 但是每个线程有自己的程序计数器和栈区域
- 程序计数器是一块内存区域,记录当前线程要执行的指令地址
为何要将程序计数器设计为线程私有呢?
线程是占用CPU的执行单位,而CPU 一般是使用时间片轮转的方式让线程轮询占用,所以当前的线程CPU时间片用完之后,要让出CPU,等下次轮到自己的时候再执行。
程序计数器就是为了记录该线程让出CPU时的执行地址的,待再次分配到时间片时线程就可以从自己的私有的计数器指定地址继续执行。
需要注意的是,如果执行的是native方法,那么pc计数器记录的是underfined地址,只有执行的是java代码时,pc计数器记录的才是下一条指令的地址。
- 每个线程都有自己的栈资源,用于存储该线程的局部变量,栈还用来存放线程的调用栈帧
- 堆是进程中最大的一块内存,存放使用new操作创建的对象实例
- 方法区则是用来存放JVM加载的类,常量,静态变量等信息