Various Random things (Was: Java 8 RFC 7189139: BigInteger's staticRandom field can be a source of bottlenecks)

Doug Lea dl at
Wed Sep 4 00:09:29 UTC 2013

On 09/03/2013 07:52 PM, Brian Burkhalter wrote:
> On Sep 3, 2013, at 4:46 PM, Doug Lea wrote:
>> I assume you mean to change line 898:
>>        if (rnd == null) {
>>            rnd = ThreadLocalRandom.current();; // was: getSecureRandom();
>>        }
> Yes.
>> This seems fine in terms of sufficient RNG quality and better
>> performance. Also in terns of being for sure thread-safe
>> even though it uses no locks/sync: there are no possible async
>> or parallel calls from entry into this method, so using
>> thread-local one is fine.
> Thanks for the comments. One question I have is whether this change would still
> be needed if
> public boolean isProbablePrime(int certainty, Random rnd) {}
> were added.

It would not be necessary, since passesMillerRabin is only called
from isProbablePrime, which would then use non-null argument.

Only adding isProbablePrime seems to be an OK conservative
move: no existing usages would be affected, but users would
need to somehow be told that they could improve performance
by changing their code to use the new method with
ThreadLocalRandom.current() as argument.


More information about the core-libs-dev mailing list