Java:java的原子操作和volatile
来源:互联网 发布:博客大巴 数据 编辑:程序博客网 时间:2024/04/29 06:40
原文链接:http://blog.csdn.net/liuhe688/article/details/4924702
原子操作
所谓原子操作,就是"不可中断的一个或一系列操作" , 在确认一个操作是原子的情况下,多线程环境里面,我们可以避免仅仅为保护这个操作 在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。
关于java中的原子性
原子性可以应用于除long和double之外的所有基本类型之上的“简单操作”。对于读取和写入出long和double之外的基本类型变量这样的操作 ,可以保证它们会被当作不可分(原子)的操作来操作。
volatile
当我们定义一个变量,假设就叫o吧,理论上讲,每次使用到o的时候,都应该从o的地址来读取这个变量,但是这存在一个效率问题,就是每次 使用o的时候都要从内存中去取值,然后通过系统总线传到CPU处理,这样开销会很大。所以编译器为了优化性能,把o放进CPU的Cache中,假如 o在赋值期间没有被改变,就直接从CPU的Cache里取o的副本来进行赋值。但是"bug"也显而易见,可能o已经被一个线程改变而重新写回了内存 ,但另一个线程并不知道,依旧按照原来的计划从CPU的Cache里读o的副本来取值,结果不幸发生了。 于是编译器的开发者为了补救这一"bug",提供了一个volatile让开发人员为他们的过失埋单,或者说提供给开发人员了一个选择效率的权利。 当变量加上了volatile时,编译器就老老实实的每次都从内存中读取这个变量值,否则就还按照优化的方案从cache里读。
在两个或者更多的线程访问的成员变量上使用volatile较好,当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
- Java:java的原子操作和volatile
- java的原子操作和volatile
- Java中的原子操作和volatile关键字
- 【转贴】Java中关于原子操作和volatile关键字
- Java中关于原子操作和volatile关键字
- i++ 是否为原子操作 和 Java中的volatile关键字
- Java中关于原子操作和volatile关键字
- Java中关于原子操作和volatile关键字
- Java中关于原子操作和volatile关键字
- volatile AtomicInteger java多线程操作 原子性
- java中volatile与原子操作
- volatile和原子操作
- volatile和原子操作
- volatile和原子操作
- JAVA拾遗 - volatile关键字和原子性的探讨
- volatile关键字和原子操作的区别
- volatile关键字和原子操作的区别
- volatile关键字和原子操作的区别
- WebApplicationContext初始化
- 基本数据类型内存模式
- Linux多进程_消息通信_设计思想交流
- Android 中的 framebuffer
- Android中preference的使用(二)
- Java:java的原子操作和volatile
- android下载大图片避免OOM的解决方法
- 第4回 RTOS的一个例子
- 你会选择哪个做你的女友
- 转资深软件工程师谈Android开发经验
- 上下左右滚动代码(全)
- WebView简介(基本显示篇)
- Android[高级教程] 设计模式之八 桥接模式
- C# 发送邮件内容嵌入图片