【Java】volatile关键字

这个关键字主要用于解决线程可见性。

java的内存模型是这样的,主存中有一个程序执行的栈,我觉得可以理解为主线程的栈,对于每一个线程,会有一个线程自己的栈,那么对于那些存放在主存中的共享数据,为了执行效率,每一个线程栈都有一个自己的副本在线程栈中。这样如果一个线程修改了这个变量,是修改的自己的线程栈的缓存,其他变量就不知道这个变量的最新的值。那么volatile关键字就是强制线程读写时,直接与内存中的变量打交道,而不是自己的缓存。

这个过程如下:

【Java】volatile关键字

一旦主存中的值改变,线程要用到这个值时,就会把最新的值读入。

但是这个过程不是原子性的,即volatile不保证原子性,上述读入,修改,赋值,写回过程不是原子的。