为什么volatile变量比普通同步更有效

use*_*741 5 java concurrency multithreading volatile java-memory-model

我被告知使用volatile变量比使用synchronized块(读或写)时使用synchronized块要高效得多.

直到Java 1.4我才能看到原因(因为那时线程不必刷新并刷新所有可访问的内存).

但是从Java 1.5开始,我在使用volatile变量和synchronized块之间看到的唯一区别就是锁获取机制.

获得锁真的那么贵吗?如果是这样,为什么呢?

crn*_*nlx 1

“费用”是因为它每次都从内存中读取,而不是可能使用内存缓存。不是很多,至少在 x86 机器上是这样。