volatile和Sychronized

2019-08-02

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和Sychronized

原文地址:https://www.cnblogs.com/ldddd/p/11290289.html