在JDK1.7Update 7中的java.lang.Class.newInstance0()中,我看到了以下注意事项:
注意:在当前的Java内存模型下,以下代码可能不完全正确。
有谁能解释一下原因吗?
发布于 2012-11-01 12:58:15
在这段代码中,我能看到的唯一问题是" cachedConstructor“字段是不稳定的,虽然它保证了线程之间的值可见性效应,但是这个特定的代码块有一个怪癖,不同的线程在某个线程分配值之前,可以将cachedConstructor视为null,即初始化序列不是原子的。这只能导致cachedConstructor可能同时被分配几次,但如果没有人特别依赖于它将是同一个构造器实例,则不会破坏代码。如果cachedConstructor初始化块将被同步,那么它将是原子的,也就是说,不管竞争条件如何,cachedConstructor只分配一次。
也就是说,代码应该正常工作,但只允许多个线程对缓存的值进行并发、过度的重新计算。
发布于 2012-11-01 17:36:01
当前Java内存模型
问题是“有多流行”。
这段代码很可能是非常古老的,1.4或更早,从那以后没有人碰过它。
作者可能意识到正在研究一种新的记忆模型。
https://stackoverflow.com/questions/13177298
复制相似问题