On May 11 2012, at 03:12 , Alan Bateman wrote: > On 11/05/2012 00:11, Mike Duigou wrote: >> >> Hello all; >> >> A benign but potentially expensive race condition was discovered in >> java.util.UUID. The initialization of numberGenerator may cause the creation >> of a number of SecureRandom instances if multiple threads are attempting to >> initialize the field at the same time. This can happen because creation of >> the SecureRandom instances, depending upon system configuration and state, >> may take a significant amount of time. >> >> Using a shared SecureRandom instance for the numberGenerator is an >> optimization--nothing bad happens as a result of each thread using it's own >> instance. However, creation of multiple SecureRandom instances, especially >> during system startup, may be expensive or have high latency if no previous >> SecureRandom instances have been created. >> >> Accordingly, a holder class is used to ensure that only a single >> SecureRandom instance is created. The holder also serves to defer >> initialization of numberGenerator until randomUUID() is first called. >> >> Webrev: >> >> http://cr.openjdk.java.net/~mduigou/7071826/0/webrev/ >> >> This issue will be proposed for backport to Java 7u6 once integrated into >> Java 8 >> > The implementation change looks good to me. For the javadoc change then could > you link to RFC 4122 on the IEFT site?
Yes. > > I don't quite get the test update, it improves the test but I don't see how > it might demonstrate the race condition. It doesn't demonstrate the race condition. The test changes are mostly just a result of reviewing the tests while I planned the changes. > Minor consistency comment is that the if statements use braces whereas the > existing code doesn't, According to javastyle guidelines we're supposed to always use braces. I've not modified existing cases where braces are not present unless modifying the if expression. > also missing space in "if(". Fixed. > > -Alan. >