并发 - 为什么使用嵌套子类作为最终静态字段?

Pol*_*ome 3 java concurrency

我试图了解对JDK所做的更改:

http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/223be1d3494f

在此更改之前,使用双重检查锁定来确保线程安全,从而导致问题.

他们为什么要使用另一个子类?为什么他们不只是使用static final Random randomNumberGenerator = new Random();StrictMath

或者,更一般的是,为什么会这样:

标准技术是拥有一个嵌套的子类,并根据需要初始化最终字段(懒惰)

(来自https://bugs.openjdk.java.net/browse/JDK-6470700)

Bri*_*etz 5

这是有效Java第48项中描述的初始化按需持有者习语.

请参阅:https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom

另请参阅:正确实现按需初始化持有者习惯用法