我java.lang.Class.newInstance0()在JDK 1.7 Update 7中看到了以下注释:
注意:在当前Java内存模型下,以下代码可能不严格正确.
任何人都可以解释一下原因吗?
我可以看到这个代码中唯一的问题是"cachedConstructor"字段是volatile,而它保证了线程之间的值可见性效果,这个特定的代码块有一个怪癖,不同的线程可以在赋值之前将cachedConstructor视为null线程之一,即初始化序列不是原子序列.这只能导致cachedConstructor可以同时分配几次,但如果没有人特别依赖它将是同一个Constructor实例,则不会破坏代码.如果cachedConstructor初始化块将被同步,那么它将是原子的,即cachedConstructor仅被分配一次而不管竞争条件如何.
也就是说,代码应该正常工作,但只允许多个线程同时过度重新计算缓存值.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |