java volatile关键字用法
来源:互联网 发布:ubuntu vbox 编辑:程序博客网 时间:2024/05/16 06:24
总结了下
特点:
1、具有锁的“可见性”,但不具有锁的“互斥性”。即可以保证释放锁之前对共享数据所做的修改对于随后的锁是可见的,即保证了数据的一致性,但不能保证同一时刻只有一个线程这个变量进行访问,即不具有原子性,不能保证变量在操作期间的值保持不变,因此,通常情况下,不能像 synchronized
那样普遍适用于实现线程安全。
2、volatile的性能优于synchronized。
使用场景:只有在状态真正独立于程序内其它内容时才能使用volatile,否则容易造成数据不一致的问题。
比如,如下例子不适合使用volatile定义lower和upper,原因是初始值是(0,5),当线程A和B分别同时调用setLower(4)和setUpper(3)时,导致了(4,3)这样的错误结果。
@NotThreadSafe public class NumberRange { private int lower, upper; public int getLower() { return lower; } public int getUpper() { return upper; } public void setLower(int value) { if (value > upper) throw new IllegalArgumentException(...); lower = value; } public void setUpper(int value) { if (value < lower) throw new IllegalArgumentException(...); upper = value; }}
因此,volatile只能用于一组非常有限的用例:a、对变量的写操作不依赖于当前值;b、该变量没有包含在具有其它变量的不变式中,比如:
volatile boolean shutdownRequested;...public void shutdown() { shutdownRequested = true; }public void doWork() { while (!shutdownRequested) { // do stuff }}可以在另一个线程中控制shutdownRequested,使得程序停止,此处非常适合使用volatile,通过同步确保参数的一致性。
0 0
- java volatile关键字用法
- java volatile关键字的用法
- java 中 synchronized关键字 volatile关键字 用法
- java transient 和 volatile 关键字的用法
- volatile关键字的用法
- 关键字volatile的用法
- volatile关键字用法
- volatile关键字用法
- volatile关键字的用法
- volatile关键字用法总结
- volatile关键字的用法
- volatile关键字的用法
- volatile 关键字的用法
- java 关键字volatile
- Java中的volatile关键字
- Java中的volatile关键字
- JAVA:volatile关键字
- Volatile 关键字 java
- 开篇博客
- 某公司面试题
- 我对工厂模式的理解
- Leetcode_unique-paths (updated c++ and python version)
- iOS小功能备忘----实现文字复制到粘贴板
- java volatile关键字用法
- USACO 回文质数
- segmentation fault 常见原因
- C语言:scanf()语句错误读取
- 数据挖掘10大算法(1)——PageRank
- USACO Section1.3 混合牛奶
- 新手笔记,使用将匿名函数赋值给变量的方式使用匿名函数
- 小心FPGA的JTAG口(上电和下电顺序)
- VS2010 VC++目录已被否决?