标签:Java 变量 原子 关键字 线程 volatile 多线程
-
volatile确保将变量的更新操作通知到其他线程。
-
volatile变量具备两种特性:
- 保证该变量对所有线程可见
- volatile禁止重排,即volatile变量不会被缓存在寄存器中或对其他处理器不可见的地方。
-
由于访问volatile变量时不会执行加锁操作,也就不会执行线程阻塞。所以volatile变量是一种比synchronized关键字更轻量级的同步机制
-
volatile使用时必须满足的2个条件
- 对变量的写操作不依赖于当前值(比如i++),或者说是单纯的变量赋值(boolean flag = true)
- 该变量没有包含在具有其他变量的不变式中,即不同的volatile变量不能相互依赖。
-
volatile使用实例
volatile boolean flag = false;
-
volatile与Synchronized关键字比较
synchronized volatile 谁更轻量 √ 可修饰对象 成员变量与非静态方法、静态方法、代码块 变量 原子性 锁的互斥执行的特性可以确保对整个临界区代码执行具有原子性 volatile对任意单个变量的读/写具有原子性,但是类似于i++这种复合操作不具有原子性 多线程访问 会阻塞 不会阻塞 synchronize是多线程之间访问资源的同步性 volatile是变量在多线程之间的可见性
标签:Java,变量,原子,关键字,线程,volatile,多线程 来源: https://www.cnblogs.com/hcxss/p/16539664.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。