作用范围
volatile仅作用于变量;synchronized不仅作用于变量,方法,还有类。
是否原子性
volatile可以改变变量可见性,但不保证原子性;而synchronized不仅改变变量可见性,还保证原子性。
是否线程阻塞
volatile不会造成线程阻塞;synchronized可能造成线程阻塞。
是否被编译器优化
volatile标记变量不会被编译器优化;synchronized标记的变量可以被编译器优化。