当前位置: 首页 > 面试题库 >

Java:请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?

卜飞鸣
2023-04-24

volatile只能作用于变量,保证了操作可见性和有序性,不保证原子性。

在Java的内存模型中分为主内存和工作内存,Java内存模型规定所有的变量存储在主内存中,每条线程都有自己的工作内存。

主内存和工作内存之间的交互分为8个原子操作:

  1. lock
  2. unlock
  3. read
  4. load
  5. assign
  6. use
  7. store
  8. write

volatile修饰的变量,只有对volatile进行assign操作,才可以load,只有load才可以use,,这样就保证了在工作内存操作volatile变量,都会同步到主内存中。

 类似资料:
  • 问题内容: 根据: http://www.ibm.com/developerworks/library/j-jtp03304/ 在新的内存模型下,当线程A写入易失性变量V,并且线程B从V读取时,现在保证了在写入V时A可见的任何变量值对B可见。 互联网上的许多地方都指出,以下代码永远不应显示“错误”: 应 当为1,所有的线程是1。 但是 有时我会打印“错误” 。这怎么可能? 问题答案: 更新: 对于

  • 根据: http://www.ibm.com/developerworks/library/j-jtp03304/ 在新的内存模型下,当线程A写入易失性变量V,线程B从V读取时,在写入V时对A可见的任何变量值现在都保证对B可见 互联网上的许多地方声明以下代码永远不应该打印“错误”: 当为1时,所有线程的应为1。 然而,我有时会打印“错误”。这怎么可能呢?

  • 本文向大家介绍谈谈vector的特殊性之为什么它不是STL容器,包括了谈谈vector的特殊性之为什么它不是STL容器的使用技巧和注意事项,需要的朋友参考一下 前言 起因是这样的,昨天在查C++11的range base for loop相关的东西的时候,看到说vector< bool >是一个proxy iterator,非常的特殊,于是就好奇的研究了一下。 首先vector< bool> 并不

  • 主要内容:可见性,原子性,举个例子首先要了解的是,volatile可以保证可见性和顺序性,这些都很好理解,那么它为什么不能保证原子性呢? 可见性 可见性与Java的内存模型有关,模型采用缓存与主存的方式对变量进行操作,也就是说,每个线程都有自己的缓存空间,对变量的操作都是在缓存中进行的,之后再将修改后的值返回到主存中,这就带来了问题,有可能一个线程在将共享变量修改后,还没有来的及将缓存中的变量返回给主存中,另外一个线程就对共享变量

  • 主要内容:可见性,原子性,举个例子首先要了解的是,volatile可以保证可见性和顺序性,这些都很好理解,那么它为什么不能保证原子性呢? 可见性 可见性与Java的内存模型有关,模型采用缓存与主存的方式对变量进行操作,也就是说,每个线程都有自己的缓存空间,对变量的操作都是在缓存中进行的,之后再将修改后的值返回到主存中,这就带来了问题,有可能一个线程在将共享变量修改后,还没有来的及将缓存中的变量返回给主存中,另外一个线程就对共享变量

  • 本文向大家介绍请谈一谈你有什么兴趣爱好呢?相关面试题,主要包含被问及请谈一谈你有什么兴趣爱好呢?时的应答技巧和注意事项,需要的朋友参考一下 辩论,因为参加辩论比赛能够锻炼我的逻辑思维,提升我的应对能力,另外也能更精准的找到别人话语中的漏洞,因为辩论需要专注去听和思考,那么也能让我在做一件事情的时候更加专注。