java.lang.Class.newInstance0()
我在 JDK 1.7 Update 7 中遇到了以下注释:
注意:以下代码在当前 Java 内存模型下可能并不完全正确。
有人可以解释为什么吗?
java.lang.Class.newInstance0()
我在 JDK 1.7 Update 7 中遇到了以下注释:
注意:以下代码在当前 Java 内存模型下可能并不完全正确。
有人可以解释为什么吗?
我可以看到此代码中的唯一问题是“cachedConstructor”字段是易失性的,虽然它保证了线程之间的值可见性效果,但这个特定的代码块有一个怪癖,即不同的线程可以在值将被分配之前将 cachedConstructor 视为 null线程之一,即初始化序列不是原子的。这只会导致可能会同时分配 cachedConstructor 几次,但如果没有人特别依赖它将是同一个 Constructor 实例,则不会破坏代码。如果 cachedConstructor 初始化块将被同步,那么它将是原子的,即 cachedConstructor 只分配一次,而与竞争条件无关。
也就是说,代码应该可以正常工作,但只允许多个线程同时过度重新计算缓存值。
当前的 Java 内存模型
问题是“电流如何”。
那段代码可能很古老,1.4 或更早版本,从那以后就没有人碰过它。
作者可能知道正在研究一种新的内存模型。