设计决策 - Math.java中单独的RandomNumberGeneratorHolder类的用途/优势是什么?

Har*_*dha 3 java design-decisions java-8

所以我浏览了Math.java源代码,发现创建了一个持有者类来保存randomNumberGenerator静态变量.这是相关的一段代码.

public final class Math {
 // other methods.
 public static double random() {
   return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
 }

 private static final class RandomNumberGeneratorHolder {
   static final Random randomNumberGenerator = new Random();
 }
}
Run Code Online (Sandbox Code Playgroud)

国际海事组织,我们可以简单地宣布randomNumberGeneratorprivate static final内部Math类本身.

我的问题是,为此创建一个单独的持有者类是否有任何好处?或者这只是个人偏好.

Ric*_*arn 8

这是按需初始化持有者模式的示例.当MathJVM加载类时,Random不会立即构造实例.相反,只有在random()调用方法时才会发生,此时RandomNumberGenreatorHolder将加载类,并Random构造单例对象.

本质上,代码确保Random单例是懒惰创建的.