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

是否可以对实例初始化进行重新排序并分配给共享变量?

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

是否可以对实例初始化进行重新排序并分配给共享变量?

调用

foo = new Foo();
涉及到一些操作,除非您引入适当的同步措施以防止同步,否则这些操作可能会重新排序:

  1. 为新对象分配内存
  2. 写入字段的默认值(
    a = 0
  3. 写入字段的初始值(
    a = 1
  4. 发布对新创建对象的引用

没有适当的同步,步骤3和步骤4可能会重新排序(请注意,步骤2必须在步骤4之前发生),尽管x86架构上的热点不太可能发生。

为防止这种情况,您有几种解决方案,例如:

  • 进入
    a
    决赛
  • 同步访问
    foo
    (使用同步的
    init
    AND getter)。

无需深入了解JLS#17,您可以阅读有关类初始化(强调我的意思)的JLS#12.4.1:

初始化代码不受限制的事实允许构建示例,在 示例中
,在评估其初始化表达式之前,当类变量的值仍具有其初始默认值时,就可以观察到该变量的值 ,但实际上这种示例很少见。(
这些示例也可以用于实例变量初始化
。)Java编程语言的全部功能在这些初始化程序中可用。程序员必须格外小心。这种功能给代码生成器带来了额外的负担,但是由于Java编程语言是并发的,因此无论如何都会出现这种负担。



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

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

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