Java并发基础(3)-Volatile基本介绍

##基本概念
volatile是Java语言提供的一种synchronized的弱化版本- volatile变量的内存可见性得到保证。也就是说对 volatile变量的更改对其他所有线程都是可见的,不需要 synchronized。当一个变量被声明为 volatile,编译器和运行时(JVM、OS等)都注意到这个变量是被共享的,这个变量上的操作不应该和其他内存操作一起被重排序。 volatile变量不会被缓存在寄存器或则缓存(L1,L2等)上(缓存会使得变量对于其他核心不可见),所以说对一个 volatile变量的读写总会获得最新的值。(多线程环境下对普通变量很可能获得的是最近的某一个值,而不一定是最新的。可以参考java内存模型)

简单的说,volatile提供如下的功能:

  • 可见性(某个线程更改过后其他线程可以看到)
  • 防止被重拍序

必须注意的是, volatile不保证互斥性,也就是说在没有其他同步措施的情况下多个线程对一个 volatile变量进行写是会造成并发冲突的