volatile和synchronized有什么区别
1.工作原理
· volatile本质上是在告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取。
· synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住
2.使用级别
· volatile仅能使用在变量级别
· synchronized可以使用在变量、方法和类级别
3.可见性和原子性
· volatile仅能实现变量的可见性,不能保证原子性
· synchronized可以保证变量的可见性和原子性
4.线程阻塞
· volatile不会造成线程的阻塞
· synchronized可能造成线程的阻塞
5.编译器优化
· volatile标记的变量不会被编译器优化,即指令重排
· synchronized标记的变量可以被编译器优化
本文链接:https://my.lmcjl.com/post/19354.html
展开阅读全文
4 评论