# HG changeset patch # User bpb # Date 1377203542 25200 # Node ID 828d85603705e971f74459ae12f389e503ec99e5 # Parent 1cab3f8c48c7d65710790bdf8ba70ed29337002d 6470700: Math.random() / Math.initRNG() uses "double checked locking" Summary: Replace class Random variable with a static final holder class Reviewed-by: alanb, mduigou, chegar Contributed-by: Brian Burkhalter diff -r 1cab3f8c48c7 -r 828d85603705 jdk/src/share/classes/java/lang/Math.java --- a/jdk/src/share/classes/java/lang/Math.java Wed Aug 21 17:17:45 2013 +0200 +++ b/jdk/src/share/classes/java/lang/Math.java Thu Aug 22 13:32:22 2013 -0700 @@ -698,11 +698,8 @@ return 0; } - private static Random randomNumberGenerator; - - private static synchronized Random initRNG() { - Random rnd = randomNumberGenerator; - return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd; + private static final class RandomNumberGeneratorHolder { + static final Random randomNumberGenerator = new Random(); } /** @@ -729,9 +726,7 @@ * @see Random#nextDouble() */ public static double random() { - Random rnd = randomNumberGenerator; - if (rnd == null) rnd = initRNG(); - return rnd.nextDouble(); + return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble(); } /** diff -r 1cab3f8c48c7 -r 828d85603705 jdk/src/share/classes/java/lang/StrictMath.java --- a/jdk/src/share/classes/java/lang/StrictMath.java Wed Aug 21 17:17:45 2013 +0200 +++ b/jdk/src/share/classes/java/lang/StrictMath.java Thu Aug 22 13:32:22 2013 -0700 @@ -678,11 +678,8 @@ return Math.round(a); } - private static Random randomNumberGenerator; - - private static synchronized Random initRNG() { - Random rnd = randomNumberGenerator; - return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd; + private static final class RandomNumberGeneratorHolder { + static final Random randomNumberGenerator = new Random(); } /** @@ -709,9 +706,7 @@ * @see Random#nextDouble() */ public static double random() { - Random rnd = randomNumberGenerator; - if (rnd == null) rnd = initRNG(); - return rnd.nextDouble(); + return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble(); } /**