[concurrency-interest] ThreadLocalRandom

Doug Lea dl at cs.oswego.edu
Mon Jan 12 12:31:09 EST 2009

As probably the final refactoring pass on Java7 versions of ForkJoin etc
the thread-local random generator was pulled out into a stand-alone class.
Class ThreadLocalRandom is useful in most situations where people use
java.util.Random across multiple threads. It is a subclass of Random,
but has no constructor -- instead a static "current()" method to
get the one for the current thread. It also doesn't let you change
the seed. (So people who need thread-local generators with explicit
seed control can't use it.)

The main reason for using it is performance, including performance
testing. Using a contended shared Random will often be 10X slower,
and mask the performance differences you are actually looking for.
(Some SPEC benchmarks have had this problem.)


Comments welcome.

Also, as we move closer to jdk7 (openjdk) integration,
anyone wanting to help with code or documentation reviews
ot testing might want to take a look. See links from


More information about the Concurrency-interest mailing list