java - 关于Java内存模型的一个问题

标签 java multithreading memory-model

几天前,我提出了一个问题,询问如何使用关键字“ volatile ”,我得到了答案。在此我要再次感谢那些帮助过我的人。 然而,我脑海中出现了一个关于JMM的新问题,目前我知道有主存和线程自己独立的缓存(也许有更专业的术语),现在我想知道线程缓存中存储了什么,共享对象引用的副本(对象地址的副本)还是共享对象的副本?比如我声明一个对象 B b = new B();并且b可以被两个线程访问,那么当b被线程访问时,b是对象引用被复制并存储在线程自己的缓存内存中,或者是b的对象指向被复制并存储在线程自己的缓存内存中?谢谢。

最佳答案

任何由多个线程访问的内容都可能位于“线程缓存”中。如果引用是对象的一部分,则包括引用。它不会包含局部变量中保存的引用,因为它们位于堆栈上并且无法从其他线程访问。

所以答案确实是“两者”。

关于java - 关于Java内存模型的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864850/

相关文章:

java - 使用 JSONAssert 检查 JSON 数组中是否存在某个项目

Java多线程使线程以与它们开始但同时运行的顺序相同的顺序结束

c - 线程如何获取互斥锁?

c# - 在多线程环境中引发事件

c++ - 性能与 C++ 内存模型

java - 使用分隔符连接字符串并去除空字符串

java - LibGDX 路径 (CatmullRomSpline) 恒速

java - 无法为 ConfigCat 创建新的客户端实例 (configcat-java-client-6.0.1)

c# - 保证变量的最新值始终对多处理器系统上的多个线程可见

c++ - 每个 memory_order 是什么意思?