1、进程:
1.1)程序执行时的一个实例
1.2)每个进程都有独立的内存地址空间
1.3)系统进行资源分配和调度的基本单位
1.4)进程里的堆,是一个进程中最大的一块内存,被进程中的所有线程共享的,进程创建时分配,主要存放 new 创建的对象实例
1.5)进程里的方法区,是用来存放进程中的代码片段的,是线程共享的
1.6)在多线程 OS 中,进程不是一个可执行的实体,即一个进程至少创建一个线程去执行代码
2、线程:
2.1)进程中的一个实体
2.2)进程的一个执行路径
2.3)CPU 调度和分派的基本单位
2.4)线程本身是不会独立存在
2.5)当前线程 CPU 时间片用完后,会让出 CPU 等下次轮到自己时候在执行
2.6)系统不会为线程分配内存,线程组之间只能共享所属进程的资源
2.7)线程只拥有在运行中必不可少的资源(如程序计数器、栈)
2.8)线程里的程序计数器就是为了记录该线程让出 CPU 时候的执行地址,待再次分配到时间片时候就可以从自己私有的计数器指定地址继续执行
2.9)每个线程有自己的栈资源,用于存储该线程的局部变量和调用栈帧,其它线程无权访问
3、关系:
3.1)一个程序至少一个进程,一个进程至少一个线程,进程中的多个线程是共享进程的资源
3.2)Java 中当我们启动 main 函数时候就启动了一个 JVM 的进程,而 main 函数所在线程就是这个进程中的一个线程,也叫做主线程
3.3)一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器,栈区域。