关键字volatile是java虚拟机提供的最轻量级的同步机制。但是许多人对它的理解还是不正确,不完整。
下面详细讲解一下:
由于关键字volatile关键没有被更好的理解,因此许多程序员遇到处理多线程数据竞争问题的时候都是有synchronzied来同步,仅为读写一两个实例域就使用同步,显得开销有些大了。因此需要深入理解此关键字。
Java内存模型对volatile专门定义了一些特殊的访问规则
当一个变量被定义为volatile时,此变量具备两种特性:
1.可见性:可见性在java内存模型中有定义,可以参看。
普通变量则没有,他们在线程之间的交互是通过主内存来完成,volatile变量则是通过主内存完成交换,但是两者区别在于volatile变量能立即同步到主内存中,当一个线程修改变量的变量的时候,立刻会被其他线程感知到。
特别注意一点:volatile变量的可见性经常性被误解,认为,valotile变量在各个线程中是一致的。所以基于volatile变量是安全的。这种认为是错误的。论据是正确的,但是得出的是安全的就不正确了。不会存在不一致性问题(在各个的工作内存中可以存在不一致的情况,但是由于每次使用之前都要刷新,执行引擎看不