synchronized和volatile
Posted huangzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了synchronized和volatile相关的知识,希望对你有一定的参考价值。
简述synchronized和volatile的区别
1、synchronized可以使用在变量、方法、类级别,而volatile只能使用在变量级别
2、synchronized可以保证变量修改的可见性和原子性,而volatile只能保证变量修改的可见性
3、synchronized有可能造成线程的阻塞,而volatile不会
4、synchronized标记的变量会被编译器优化,而volatile标记的变量不会被优化
5、volatile的变量若与自身相关,如以下的声明方式:n=n+1,n++等,那么声明为volatile的变量就不起作用
6、synchronized标记变量的时候是锁定变量,只能让一个线程可以拥有该变量,其他线程只能阻塞而volatile是告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取。直白点说就是当被标记的变量发生了变化时,它尽快让其他线程知道。
以上是关于synchronized和volatile的主要内容,如果未能解决你的问题,请参考以下文章