1. CPU缓存模型

  • CPU 缓存的出现是为了解决 CPU 直接访问 RAM 内存 效率低下的问题。

image.png

2. JAVA内存模型

java 内存模型 指定了 java 虚拟机如何与计算机的 主内存 RAM 进行工作的,本身是一个抽象的概念,与计算机的硬件结构并不完全一样。java 内存模型 JMM 决定了一个线程对共享变量的写入何时对其他线程可见。
image.png

3. 变量的线程安全问题

  • 静态变量:线程非安全

静态变量即类变量,位于方法区,为所有类实例对象所共享(即共享一份内存)。但在多线程条件下,每个线程都会存在变量的副本,当某个线程的静态变量副本值发生更改后,没有及时更新到主内存,其他线程在修改或读取的时候,就会发生值大小前后不一致的问题,即多线程的安全问题。

  • 成员变量:每个线程操作不同的类实例对象则线程安全

成员变量为类实例对象私有,位于堆空间中,若多个线程同时操作一个实例对象的成员变量时,会出现线程安全问题。因此此时该成员变量为多个线程所共享。反之则线程安全。

  • 局部变量:线程安全

局部变量出现在类方法中,位于栈空间中,线程间不共享,故不存在线程安全问题。