java的volatile关键字有什么用

这期内容当中小编将会给大家带来有关java的volatile关键字有什么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站设计、成都网站制作、网站维护、乐山服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城系统网站开发、政府网站等各类型客户群体,为全球数千家企业提供全方位网站维护、服务器维护解决方案。

  • 解决什么问题?

  1. 内存可见性
    在执行变量写操作后,执行lock指令,这个指令将变量实时写入到主内存而不是处理器的缓存中,然后其他处理器通过缓存一致性协议嗅探到这个变量的变更,将该变量的缓存设置为无效,从而实现内存可见性。

  2. 禁止代码重排序 重排序分类:

    1. 编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。

    2. 指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-LevelParallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。

    3. 内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。

  • 实现机制

volatile的两条实现原则

1. Lock前缀指令会引起处理器缓存回写到内存
2. 一个处理器的缓存回写到内存会导致其他处理器的缓存无效
  • 使用场景

  1. 写入变量值不依赖变量的当前值时。因为如果依赖当前值,将是获取—计算—写入三步操作,这三步操作不是原子性的,而volatile不保证原子性。

  2. 读写变量值时没有加锁。因为加锁本身已经保证了内存可见性,这时候不需要把变量声明为volatile的。

上述就是小编为大家分享的java的volatile关键字有什么用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


本文名称:java的volatile关键字有什么用
文章位置:http://myzitong.com/article/gcphps.html