volatile 关键字
摘抄并用于学习笔记 1. volatile 简介 volatile 是并发编程中另一知识点,与 Synchronized 各领风骚。 synchronized 是阻塞式同步,在线程竞争激烈的情况下会升级成重量级锁。而 volatile 就是 java 虚拟机提供的最轻量级的同步机制。Java 内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中?这个时机对普通变量是没有规定的,而针对 volatile 修饰的变量给 Java 虚拟机特殊的约定,线程对 volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读的现象,从而保证数据的“可见性”。 现在我们有了一个大概的印象就是:被 volatile 修饰的变量能够保证每个线程获取该变量时是新值,从而避免出现数据脏读的现象。 2. volatile 实现原理 在生成汇编代码时会在 volatile 修饰的共享变量进行写操作的时候多出 Lock 前缀的指令。 为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2 或 其他)后再进行操作,但操作完不知道何时会写到内存。如果对声明了 volatile 的变量进行写操作,JVM 就会向处理器发送一条 Lock 前缀的指令