Java并发编程(一)线程

逆流者 2021年02月21日 31次浏览

此博文为读《Java并发编程之美》一书笔记, 方便及时查阅


线程是进程中的一个实体,线程本身是不会独立存在;
进程是代码在数据集合上的一次运行活动, 是系统进行资源分配调度的基本单位,线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。

操作系统在分配资源时是把资源分配给进程的,但CPU 资源是被分配到线程的,因为真正要占用 CPU运行的是线程,所以也说线程是CPU分配的基本单位。

在 Java中,当我们启动 main 函数时其实就启动了一个JVM的进程,而main 函数所在的线程就是这个进程中的一个线程,也称主线程。

进程和线程的关系图:进程和线程的关系图

  • 堆和方法区都是进程中所有线程共享的;
  • 堆是进程中最大的一块内存, 是进程创建时分配的, 用来存放new出来的对象示例;
  • 方法区是用来存放JVM加载的类、常量、静态变量等信息;
  • 线程中的程序计数器和栈是线程私有的, 其他线程是访问不了的;
  • 程序计数器是一块内存区域, 用来记录线程当前要执行的指令地址, 一般占用CPU的时间片来轮训执行, 时间片用完后, 让给其它线程来执行, 当又轮到自己占用CPU的时, 就会从程序计数器中找到上次执行的地方接着执行;
    注意: 如果执行的是native方法, 程序计数器记录的是undefined地址, 执行java代码时, 才是记录的指令地址;
  • 栈是用来存储线程的局部变量的