java并发之原子性
来源:互联网 发布:淘宝详情页宽度是多少 编辑:程序博客网 时间:2024/06/11 08:56
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp17
1、原子性操作:
不能被线程调度机制中断的操作;--对原子性变量的赋值和返回操作通常都是原子性的
原子性可以用于除了long和double之外的所有基本类型上的简单操作(当做不可分的原子),但是JVM将64位的 (long 和double变量)读取和写入当成是两个分离的32位 操作来执行。
2、同步机制与可视性:
同步机制强制在处理器系统中,一个任务做出的修改必须在应用中是可视的,如果没有同步机 制,那么修改时可视性将无法确定。
3、关于volatile:
(1)当你定义long或者double的时候,如果使用volatile关键字,就会获得原子性(JDK 1.5之前不支持)
(2)volatile关键字还确保了应用中的可视性。
(3)当一个域的值依赖于他之前的值时(比如说自增)volatile就无法工作了。
(4)如果一个域的值受到其他域的值得限制,那么volatile也就无法工作了--例如Range类的lower和upper边界就必须遵守lower<=upper。
4、volatile、synchronized和主存:
(1)如果你将一个域声明为volatile,只要对这么域近些了写操作,那么所有的读操作都可以看到这个修改,即便使用了本地缓存,情况也确实如此,volatile域会立即写入到主存中,而读操作就发生在主存中。
(2)在非volatile域上的原子操作不必刷新到主存中去,因此其他读取该域的任务也不必看到该新值。
(3)同步也会导致向主存中刷新,因此一个域如果完全由synchronized方法或者语句块来保护,那就不必将其设置为volatile。
(4)一个任务进行的任何写入操作对于这个任务本生都是可视的。
(5)使用volatile而不是synchronized唯一安全的情况就是类中只有一个可变的域。--实现同步第一选择应该是synchronized。
1、原子性操作:
不能被线程调度机制中断的操作;--对原子性变量的赋值和返回操作通常都是原子性的
原子性可以用于除了long和double之外的所有基本类型上的简单操作(当做不可分的原子),但是JVM将64位的 (long 和double变量)读取和写入当成是两个分离的32位 操作来执行。
2、同步机制与可视性:
同步机制强制在处理器系统中,一个任务做出的修改必须在应用中是可视的,如果没有同步机 制,那么修改时可视性将无法确定。
3、关于volatile:
(1)当你定义long或者double的时候,如果使用volatile关键字,就会获得原子性(JDK 1.5之前不支持)
(2)volatile关键字还确保了应用中的可视性。
(3)当一个域的值依赖于他之前的值时(比如说自增)volatile就无法工作了。
(4)如果一个域的值受到其他域的值得限制,那么volatile也就无法工作了--例如Range类的lower和upper边界就必须遵守lower<=upper。
4、volatile、synchronized和主存:
(1)如果你将一个域声明为volatile,只要对这么域近些了写操作,那么所有的读操作都可以看到这个修改,即便使用了本地缓存,情况也确实如此,volatile域会立即写入到主存中,而读操作就发生在主存中。
(2)在非volatile域上的原子操作不必刷新到主存中去,因此其他读取该域的任务也不必看到该新值。
(3)同步也会导致向主存中刷新,因此一个域如果完全由synchronized方法或者语句块来保护,那就不必将其设置为volatile。
(4)一个任务进行的任何写入操作对于这个任务本生都是可视的。
(5)使用volatile而不是synchronized唯一安全的情况就是类中只有一个可变的域。--实现同步第一选择应该是synchronized。
0 0
- java并发之原子性
- Java并发之原子性
- 【并发】java并发之可见性与原子性
- java并发2.2-原子性
- java并发-原子性
- java原子性与并发
- java并发之原子性与可见性(一)
- java并发之原子性与可见性
- java并发之原子性、可见性、有序性
- java并发之原子性与可见性
- java并发之原子性与可见性(一)
- java并发之原子性与可见性
- java并发之原子性与可见性
- java并发之原子性与可见性(一)
- java 并发操作之原子性与可视性
- java多线程之线程并发库原子性操作类
- Java并发编程之原子变量
- Java并发编程之原子变量
- Class.forName和ClassLoader.loadClass的比较
- java锁机制
- ReentrantLock和synchronized的性能对比
- 多线程常用方法以及对锁的控制
- Java安全(JCA/JSSE):数字证书与SSL
- java并发之原子性
- iOS 9功能
- Hashtable、synchronizedMap、ConcurrentHashMap 比较
- Java对象序列化
- Objective-C:#include与#import的区别
- java程序的内存分配
- 凸包问题
- 微信分享
- jdbc预编译