With respect to this issue http://bugs.sun.com/view_bug.do?bug_id=6470700
the code of concern from java.lang.Math is 701 private static Random randomNumberGenerator; 702 703 private static synchronized Random initRNG() { 704 Random rnd = randomNumberGenerator; 705 return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd; 706 } 731 public static double random() { 732 Random rnd = randomNumberGenerator; 733 if (rnd == null) rnd = initRNG(); 734 return rnd.nextDouble(); 735 } where the class variable "randomNumberGenerator" is not used anywhere else in the class. The complaint is that this is an instance of the broken double-checked locking pattern. While at first glance this might appear to be the case, it does not seem so to me. It looks more like an attempt to avoid calling a synchronized method if "randomNumberGenerator" has already been initialized. A more typical pattern would be private static Random randomNumberGenerator; private static synchronized Random getRNG() { if (randomNumberGenerator == null) { randomNumberGenerator = new Random(); } return randomNumberGenerator; } public static double random() { return getRNG().nextDouble(); } Comments, please. Thanks, Brian