高并发的理解二

前言

本章着重聊一聊线程本身的特性,对于多线程并发编程来说,如果不能了解线程的组成和特性,那么对于后续AQS或是线程池的理解都会受到影响

线程基本介绍

线程是操作系统调度的基本单元,每一个线程都有自己的程序计数器,虚拟机栈,线程在执行方法的时候,都会创建一个相应的栈帧用于保存和计算相关数据

线程的工作结构和jvm之间的关系

对于线程的基本构造,首先要了解的就是程序计数器和虚拟机栈
程序计数器:多线程的执行实际上是cpu的高速切换实现的,那么对于切换后再重新切换回之前的线程,具体执行的位置,则是记录在了程序计数器当中,程序计数器是jvm中的一块线程私有的内存区域,虚拟机记录的则是字节码指令的地址
虚拟机栈:虚拟机栈也是一块线程私有的内存区域,他和线程同时产生同时消失,描述的是线程执行方法的内存模型,线程每执行一个方法,都会在虚拟机栈中创建一个栈帧,每一个栈帧的如栈和出站则对应着一个方法的执行

栈帧是做什么的

在虚拟机栈中我们提到,线程在执行一个方法的时候,都会创建一个栈帧,这个栈帧包括了局部变量表,操作数栈,动态连接,返回地址们
局部变量表:其实就是我们常说的栈内存,用来保存变量数据的存储空间
操作数栈:这个是需要重点关注的,用于方法在运行时存放和获取操作数的栈空间,大小也是编译器就确定下来的,线程在执行一个方法最初的时候,操作数栈是空的,方法执行过程中会不断的往操作数栈中进行入栈/出栈的操作,比如有一个相加的指令,这时候会将栈中的数据出栈进行计算,并将结果重新入栈
动态链接-返回地址略过。。。

线程在执行过程中的jvm实现逻辑

创建线程->创建虚拟机栈->线程执行方法->创建栈帧->线程执行方法逻辑->栈帧中会不断的进行出栈和入栈的操作

多线程的优先级代表的是什么

在多线程中,可以对线程进行优先级的设置,最初我以为优先级越高代表越早执行,后来看书发现,优先级实际上是表示线程获取时间片的数量,时间片则对应的就是系统资源,所以,优先级越高的线程,占用的系统资源也越大

多线程的中断标记

在AQS同步器和线程池的地方会用到中断,这里简单说下
interrupt:线程中断标记的方法,调用该方法会对线程打上中断标记
isInterrupted:该方法返回线程中断状态,实际上调用的是interrupted方法,但是传递的参数是false,表示该方法不会清除中断标记
interrupted:返回线程中断状态,并清除中断标记

理解线程间的等待通知模式

在多线程的场景中,线程之间的沟通可以通过等待通知来进行,比如说,线程A来访问对象,但是发现对象已经被锁占据了,这时候线程A就会进入等待队列,将自己挂起,等待锁的释放,当锁被释放后,将会通知进入等待队列的线程,这时候就可以尝试去获取锁资源

猜你喜欢

转载自blog.csdn.net/HNUST_LIZEMING/article/details/88371515