Improving ThreadLocalRandom (and related classes)
Chris Hegarty
chris.hegarty at oracle.com
Tue Jan 8 16:07:10 UTC 2013
Doug,
I have no objection as such to adding certain fields to j.l.Thread to
support faster ThreadLocalRandom. Maybe it would help to see how they
are to be used?
Given, 1 and 2 below ( I'm not sure about 3 ), would having a direct
reference from j.l.Thread to ThreadLocalRandom (rather than using
ThreadLocal) resolve these problems?
-Chris.
On 01/08/2013 12:05 PM, Doug Lea wrote:
>
> When we introduced ThreadLocalRandom, we conservatively
> implemented it to use an actual ThreadLocal. However,
> as it becomes more widely used, it is worth improving
> the implementation by housing ThreadLocalRandom state
> (and related bookkeeping) in class Thread itself.
> This would entail three fields (16 total bytes).
>
> So I propose adding the following to class Thread:
>
> // The following three initially uninitialized fields are exclusively
> // managed by class java.util.concurrent.ThreadLocalRandom.
> /** The current seed for a ThreadLocalRandom */
> long threadLocalRandomSeed;
> /** Probe hash value; nonzero if threadLocalRandomSeed initialized */
> int threadLocalRandomProbe;
> /** Secondary seed isolated from public ThreadLocalRandom sequence */
> int threadLocalRandomSecondarySeed;
>
> The reasons for doing it in this way are:
>
> 1. Uniformly faster access to ThreadLocalRandom state. While
> ThreadLocal access is normally pretty fast already, this is
> not only faster, it does not degrade in cases where user
> programs create large numbers of ThreadLocals, which
> may (probabilistically) cause any given access to become
> slower.
>
> 2. Smaller total footprint for any program using ThreadLocalRandom.
> Three fields require less space than boxing into a padded
> ThreadLocal object. As ThreadLocalRandom becomes widely used
> within JDK itself, this includes just about all programs.
>
> 3. Further time/space savings for java.util.concurrent ForkJoinPool,
> ConcurrentHashMap, LongAdder, ConcurrentSkipList, and other
> classes that could use this form of the unified ThreadLocalRandom
> bookkeeping rather than their own special-purpose ThreadLocals
> as they now do.
>
> Any objections? If not, I'd need the help of someone permitted to
> paste the above into class Thread, review, and and commit.
>
> -Doug
More information about the core-libs-dev
mailing list