1. CPU缓存模型
- CPU 缓存的出现是为了解决 CPU 直接访问 RAM 内存 效率低下的问题。
2. JAVA内存模型
java 内存模型 指定了 java 虚拟机如何与计算机的 主内存 RAM 进行工作的,本身是一个抽象的概念,与计算机的硬件结构并不完全一样。java 内存模型 JMM 决定了一个线程对共享变量的写入何时对其他线程可见。
3. 变量的线程安全问题
- 静态变量:线程非安全
静态变量即类变量,位于方法区,为所有类实例对象所共享(即共享一份内存)。但在多线程条件下,每个线程都会存在变量的副本,当某个线程的静态变量副本值发生更改后,没有及时更新到主内存,其他线程在修改或读取的时候,就会发生值大小前后不一致的问题,即多线程的安全问题。
- 成员变量:每个线程操作不同的类实例对象则线程安全
成员变量为类实例对象私有,位于堆空间中,若多个线程同时操作一个实例对象的成员变量时,会出现线程安全问题。因此此时该成员变量为多个线程所共享。反之则线程安全。
- 局部变量:线程安全
局部变量出现在类方法中,位于栈空间中,线程间不共享,故不存在线程安全问题。
总结 ======> 方法是否存在线程安全问题,关键在于方法内部逻辑是否存在多个线程共享的变量存在。
4. final关键字与线程安全
- https://cloud.tencent.com/developer/article/1399428?from=article.detail.1514121