码迷,mamicode.com
首页 > 其他好文 > 详细

volatile和Sychronized

时间:2019-08-02 18:39:26      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:lock   cin   bsp   atom   性能   array   等等   优化   技术   

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

标签:lock   cin   bsp   atom   性能   array   等等   优化   技术   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!