Volatile关键字
1.什么是Volatile ThreadLocal可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。 ThreadLocal在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修饰符的变量则是直接读写主存。 ThreadLocalVolatile 保证了线程间共享变量的及时可见性,但不能保证原子性 2.JMM(Java内存模型) 要搞懂Volatile首先要了解一下Java内存模型 共享内存模型指的就是Java内存模型(简称JMM), JMM决定一个线程对共享变量的写入时,能对另一个线程可见 。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系: 线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本 。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。 从上图来看,线程A与线程B之间如要通信的话,必须要经历下面2个步骤: (1) 首先,线程A把本地内存A中更新过的共享变量刷新到主内存中去。 (2) 然后