企业网站建设策划案,母婴用品网站建设规划,杭州市建设银行网站,自己做网站除了域名还要买什么volatile和synchronized的区别并发编程三个特性#xff1a;原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性#xff1a;
原子性、有序性、可见性
原子性
volatile无法保证原子性。
synchronized是排它锁#xff0c;被synchronzied修饰的代码不能被打断…
volatile和synchronized的区别并发编程三个特性原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性
原子性、有序性、可见性
原子性
volatile无法保证原子性。
synchronized是排它锁被synchronzied修饰的代码不能被打断所以具有原子性。
有序性
volatile禁止JVM编译器及处理器对volatile修饰的指令重排序。
synchronzied是以程序的串行化执行来保证顺序性的synchronized代码块中的代码是可以重排序的。
可见性
volatile使用机器指令lock将修改后的工作内存中的数据强制刷新到主内存并迫使其他线程的工作内存数据失效从而保证可见性。
synchronized借助jvm指令monitorenter和monitorexit使代码串行化在monitorexit时所有共享资源都将刷新的到主内存从而保证可见性。
Violated
一旦一个共享变量类的成员变量、类的静态成员变量被volatile修饰之后那么就具备了两层语义
保证了不同线程对这个变量进行操作时的可见性即一个线程修改了某个变量的值这个新的值对其他线程来说是可见的。禁止进行指令重排序。
volatile本质是在告诉jvm当前变量在寄存器工作内存中的值是不确定的需要从主存中获取。
Synchronized
锁定当前变量只有当前线程可以访问该变量其他线程被阻塞住。
区别对比
volatile仅能使用在变量级别synchronized则可以使用在变量、方法和类级别。volatile仅能实现变量的修改可见性并不能保证原子性synchronized则可以既保证变量的修改可见性和原子性。volatile不会造成线程的阻塞synchronized可能会造成线程的阻塞。volatile标记的变量不会被编译器优化synchronized标记的变量可以被编译器优化。
参考资料请说说volatile和synchronized的区别