了解volatile关键字吗?
volatile关键字,
是JAVA提供的最轻量级的同步机制,保证了共享变量的可见性;被volatile关键字修饰的变量,如果值发生了变化,其他线程立即可见,避免出现脏读现象。
synchronized和volatile有什么区别?
1、volatile
的本质是告诉JVM当前变量在寄存器中的值是不确定的,需要从主存中读取。synchronized
则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞。
2、volatile
只能在变量级别,而synchronized
可以使用在变量,方法,类级别。
3、volatile
仅能实现变量的修改可见性,不能保证原子性;而synchronized
则可以保证变量的修改可见性和原子性。
4、volatile
不会造成线程阻塞,synchronized
可能会造成线程阻塞。
5、volatile
标记的变量不会被编译器优化,synchronized
标记的变量可以被编译器优化。