首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java.lang.Class.newInstance0()在java内存模型下不完全正确?

为什么java.lang.Class.newInstance0()在java内存模型下不完全正确?
EN

Stack Overflow用户
提问于 2012-11-01 12:40:29
回答 2查看 270关注 0票数 8

在JDK1.7Update 7中的java.lang.Class.newInstance0()中,我看到了以下注意事项:

注意:在当前的Java内存模型下,以下代码可能不完全正确。

有谁能解释一下原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 12:58:15

在这段代码中,我能看到的唯一问题是" cachedConstructor“字段是不稳定的,虽然它保证了线程之间的值可见性效应,但是这个特定的代码块有一个怪癖,不同的线程在某个线程分配值之前,可以将cachedConstructor视为null,即初始化序列不是原子的。这只能导致cachedConstructor可能同时被分配几次,但如果没有人特别依赖于它将是同一个构造器实例,则不会破坏代码。如果cachedConstructor初始化块将被同步,那么它将是原子的,也就是说,不管竞争条件如何,cachedConstructor只分配一次。

也就是说,代码应该正常工作,但只允许多个线程对缓存的值进行并发、过度的重新计算。

票数 5
EN

Stack Overflow用户

发布于 2012-11-01 17:36:01

当前Java内存模型

问题是“有多流行”。

这段代码很可能是非常古老的,1.4或更早,从那以后没有人碰过它。

作者可能意识到正在研究一种新的记忆模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13177298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档