关键字volatile与关键字synchronized
来源:互联网 发布:sjf调度算法c语言 编辑:程序博客网 时间:2024/05/22 12:06
关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。使用关键字volatile增加了实例变量在多个线程之间的可见性。但是volatile关键字最致命的缺点是不支持原子性。
下面将关键字volatile和synchronized进行比较:
1)关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字在执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。
2)多线程访问volatile不会发生阻塞,而synchronized会出现阻塞。
3)volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步。
4)关键字volatile解决的是变量在多个线程之间的可见性;而synchronized关键字解决的多个线程之间访问资源的同步性。
线程安全包含原子性和可见性两个方面,java的同步机制都是围绕这两个方面来确保线程安全的。
关键字volatile主要使用的场合是在多个线程中可以感知实例变量被更改了,并且可以获得最新的值使用,也就是用多线程读取变量时可以获得最新值使用。
关键字volatile提示线程每次从共享内存中读取变量,而不是从私有内存中读取,这样就保证了同步数据的可见性。
关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法或某一个代码块。它包含两个特征:互斥性和可见性。同步synchronized不仅可以解决一个线程看到对象处于不一致的状态,还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护之前所有的修改效果。
- 关键字volatile与关键字synchronized
- volatile与synchronized关键字
- synchronized与volatile关键字
- volatile与synchronized关键字
- volatile 与 synchronized关键字详解
- volatile关键字与synchronized关键字比较..
- Java中的synchronized与volatile关键字
- volatile/synchronized关键字解释
- synchronized和volatile关键字
- volatile和synchronized关键字
- synchronized和volatile关键字
- Volatile和Synchronized关键字
- java 中 synchronized关键字 volatile关键字 用法
- java 关键字synchronized和volatile
- 关键字synchronized和volatile比较
- ThreadLocal、volatile、synchronized、Atomic关键字
- volatile 和 synchronized 关键字区别
- 原子性与可见性 volatile与synchronized关键字
- 黑马程序员——Foundation框架NSArray和NSMUtableArray的介绍及使用
- 对Python中文分词模块结巴分词算法过程的理解和分析
- StringBuffer类
- 图解Javascript this指向什么?
- 解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- 关键字volatile与关键字synchronized
- LightOJ 1038 - Race to 1 Again(期望DP)
- 第十三周项目一(1)Prim算法的验证
- 29.UITableView表视图第四章(添加高级)
- 内部排序-交换式排序-选择排序
- hud 2586 How far away ?
- 选夫婿1
- Linux重定向:将标准输出stdout和标准错误stderr重定向到一个文件
- rhel-server-7.1更换yum源(CentOS7)