synchronized和volatile的作用和区别

valatile

被volatile修饰的共享变量保证不同线程对于此变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对于其他线程来说是立即可见的,并且将会禁止进行指令重排序。

其本质是告诉jvm当前变量在寄存器中的值是不确定的,需从主内存中读取。

synchronized

当它使用在变量上时,将会锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞。

synchronized和volatile的区别

1.volatile仅能使用在变量级别,synchronized则可以使用在变量、方法、类级别上。

2.volatile仅仅能实现变量修改可见性,并不能保证原子性,synchronized可以实现变量的修改可见性和原子性。

3.volatile不会造成线程阻塞,synchronized可能会造成线程阻塞。

4.volatile标记的变量不会被编译器优化,synchronized标记的变量可以被编译器优化。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容