使用场景:final、volatile、ThreadLocal、synchronized、Atomic(自己整理)

原理 使用场景
final 实现了Java内存模型的可见性 一个变量要被多个线程访问
volatile 实现了Java内存模型的可见性、有序性 一个变量要被多个线程访问
ThreadLocal 如果一个变量要被某个线程独享,Java中就没有类似C++中__declspec(thread)这样的关键字,不过还是可以通过java.lang.ThreadLocal类来实现线程本地存储的功能。每一个线程的Thread对象中都有一个ThreadLocalMap对象,这个对象存储了一组以ThreadLocal.threadLocalHashCode为键,以本地线程变量为值的K-V值对,ThreadLocal对象就是当前线程的ThreadLocalMap的访问入口,每一个ThreadLocal对象都包含了一个独一无二的threadLocalHashCode值,使用这个值就可以在线程K-V值对中找回对应的本地线程变量。 一个变量要被某个线程独享
synchronized 实现了Java内存模型的原子性、可见性、有序性
Atomic CAS(《深入理解Java虚拟机(第2版)》第572页) 一个变量要被多个线程访问

Java 内存模型的3个特性:原子性、可见性和有序性,详见:https://www.cnblogs.com/cag2050/p/12409283.html

原文地址:https://www.cnblogs.com/cag2050/p/12408266.html