栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java最终字段的值的“最新”保证是否扩展到间接引用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java最终字段的值的“最新”保证是否扩展到间接引用?

在这种情况下,是否保证线程B看到的ArrayList成员至少与MyClass的构造函数完成时的成员保持最新?

对,他们是。

线程在首次遇到引用时需要读取内存。因为哈希映射是构造而成的,所以其中的所有条目都是全新的,因此对对象的引用

up-to-date
是指构造函数完成后的对象。

初次遇到之后,将应用通常的可见性规则。因此,当其他线程更改最终引用中的非最终字段时,其他线程可能看不到该更改,但仍会看到构造函数发出的引用。

实际上,这意味着如果不在构造函数之后修改最终的哈希映射,则其内容对于所有线程都是常量。

编辑

我知道我以前曾经见过这种保证。

这是本文中描述JSR 133
的一段有趣的内容

初始化安全

新的JMM还寻求提供初始化安全性的新保证-
只要正确构造了一个对象(这意味着在构造函数完成之前不会发布对该对象的引用),那么所有线程都将看到它的最终字段是在其构造函数中设置的,无论是否使用同步将引用从一个线程传递到另一个线程。此外,也可以保证通过适当构造的对象的最终字段(例如,由最终字段引用的对象的字段)可以到达的任何变量也对其他线程可见。这意味着,除了其他线程可以看到的正确值之外,如果最终字段还包含对linkedList的引用,而且在构建时该linkedList的内容对于其他线程也是可见的,而无需同步。结果显着增强了final的含义-
可以安全地访问final字段而无需同步,并且编译器可以假定final字段不会更改,因此可以优化多次提取。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号