volatile和Sychronized

Posted ldddd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了volatile和Sychronized相关的知识,希望对你有一定的参考价值。

volatile与synchronize区别:

1.volatile是线程同步的轻量级实现,所以volatile的性能要比synchronize好;volatile只能用于修饰变量,synchronize可以用于修饰方法、代码块。随着jdk技术的发展,synchronize在执行效率上会得到较大提升,所以synchronize在项目过程中还是较为常见的;
2.多线程访问volatile不会发生阻塞;而synchronize会发生阻塞;
3.volatile能保证变量在私有内存和主内存间的同步(可见性在一定程度上保证有序性),但不能保证变量的原子性;(lock)synchronize可以保证变量原子性;
4.volatile保证变量在多线程之间的可见性;synchronize是多线程之间访问资源的同步性;所有同步操作都要保证其 原子性与可见性,有序性;

 

原子性:对一个操作或多个操作一旦执行过程不被任何因素打断,对变量的原子操作,都是原子的不因多线程访问而导致脏数据;AtomicInteger和AtomicIntegerArray是基于Integer类型;AtomicReference和AtomicReferenceArray基于引用类型;AtomicBoolean等等

可见性: CPU资源一直被占用的时候,工作内存与主内存之间未及时同步数据;

有序性:对语句进行优化进行指令重排(数据依赖性)但会保证程序最终结果和执行结果相同

以上是关于volatile和Sychronized的主要内容,如果未能解决你的问题,请参考以下文章

volatile原理和使用场景

synchronized和volatile

volatile的原理和实现机制

volatile和Sychronized

synchronized和volatile的区别

volatile如何保证可见性和有序性的?