volatile java

volatile 挥发性的;不稳定的;爆炸性的;反覆无常的
http://dict.youdao.com/w/volatile/#keyfrom=dict.

Volatile 变量

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。
出于简易性或可伸缩性的考虑,您可能倾向于使用 volatile 变量而不是锁。当使用 volatile 变量而非锁时,某些习惯用法(idiom)更加易于编码和阅读。此外,volatile 变量不会像锁那样造成线程阻塞,因此也很少造成可伸缩性问题。在某些情况下,如果读操作远远大于写操作,volatile 变量还可以提供优于锁的性能优势。


用volatile修饰的变量,线程每次使用这个变量的时候,都会读取这个变量最后修改的值;经常误用的用法:当原子性操作使用,错误 错误 错误 重要的事情说三遍!!!


线程直接从主内存中读取,没有相应的拷贝,可用于线程之间的通信;重要的事情: 不常误用成同步;除非像long,int 这些的赋值等原子性操作才可以,a++这种都不是原子性操作;

1、普通变量、用volatile修饰的变量的区别?
2、volatile使用的场合?

http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

Paste_Image.png

https://zh.wikipedia.org/wiki/%E5%8F%8C%E9%87%8D%E6%A3%80%E6%9F%A5%E9%94%81%E5%AE%9A%E6%A8%A1%E5%BC%8F

http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html
普通变量--主内存与线程工作内存的示意图

Paste_Image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 534评论 0 1
  • 猜想runloop内部是如何实现的?一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一...
    笔笔请求阅读 445评论 0 0
  • 今天开始用专门的本子记录时间。 起床时间没有记。 7:05分出门,吃早饭,到达到目的地天俊华府是7:58分。因为是...
    沐子2阅读 105评论 0 0
  • 禹宸的声音一如既往,温柔又好听~ 一、简短开营,课程框架介绍,时间安排 二、第一次作业--《通过什么途径获取知识》...
    鹿比鹿比阅读 315评论 11 5
  • 昨晚,我在千聊完成了人生中第一次的分享,主题是《链接牛人都不会,你还想成功》,说起来,这次分享,也是得到了牛人们的...
    林含键阅读 348评论 5 13