volatile关键字的作用

在写程序的过程当中,创建一个单例,然后static volatile 实例的时候volatile这个关键字的含义有点不知其含义。


总的来说告诉编译器这个volatile修饰的变量是易变的,当需要读取这个变量的值时,应该从内存中读取,而不是从寄存器中读取。

主要作用:

会强制变量修改的值立即存储到内存当中;两个线程A,B同时修改volatile变量的时候,两个线程都会首先从内存中读取值到寄存器当中,B修改变量时,会使A的寄存器中的值变无效;当A去修改时发现自己缓存的内容无效,会等待主内存的值更新以后再去读取新的值到寄存器当中重新计算。

非volatile 例子: int count = 1    count ++

当多线程的时候,如果线程1执行上述内容,线程2也同样执行上述内容。线程1、2都从内存读到值1,当线程1去执行+1操作的时候首先从内存读取缓存到寄存器当中,寄存器中的值+1变成2再去更新主内存地址的值,而线程2缓存的值还是刚开始读取到的1的值,+1等于2最终两个线程完成以后发现值是2而不是3。

参考:http://www.importnew.com/18126.html

http://blog.csdn.net/suhuaiqiang_janlay/article/details/5942659

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

推荐阅读更多精彩内容