volatile关键字能保证变量的可见性,但不能保证volatile变量复合操作的原子性。
简单地说,volatile变量每次被线程访问时,都被迫从主内存中重读该变量值。
当该变量发生变化时,会强迫线程将最新的值刷新到主内存。
因此,任何时刻不同线程总能看到该变量的最新值。
其实Java在语言层面还有第三种方式实现内存可见性,final,它修饰的变量不可更改。
小结:volatile比synchronized更轻量级,但没有它应用广泛。
volatile关键字能保证变量的可见性,但不能保证volatile变量复合操作的原子性。
简单地说,volatile变量每次被线程访问时,都被迫从主内存中重读该变量值。
当该变量发生变化时,会强迫线程将最新的值刷新到主内存。
因此,任何时刻不同线程总能看到该变量的最新值。
其实Java在语言层面还有第三种方式实现内存可见性,final,它修饰的变量不可更改。
小结:volatile比synchronized更轻量级,但没有它应用广泛。