优秀的编程知识分享平台

网站首页 > 技术文章 正文

volatile与synchronize区别(volite和synchronized区别)

nanyue 2024-08-25 10:38:32 技术文章 6 ℃

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资源一直被占用的时候,工作内存与主内存之间未及时同步数据;

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

自己理解总结,如有错误多多指教!

最近发表
标签列表