On 03/14/2014 01:29 AM, Brian Burkhalter wrote:

On Mar 12, 2014, at 2:08 AM, Peter Levart wrote:

Huh! This is a ThreadLocalRandom anti-pattern. Thou should not use a ThreadLocalRandom instance in a thread that did not obtain it via a call to ThreadLocalRandom.current()…

Good point.

You could create a new BigInteger(512,*rnd*) in the static initializer and use it to create new BigDecima(bigInteger) in testFirstToStrin.

I simply replaced ThreadLocalRandom with Random which probably creates a bottleneck but there is no significant difference in the results.

That's probably because the time spent computing the toString representation initially (the concurrent part of testFirstToString benchmark) takes much more time than computing the random number (the synchronized/serialized part). The difference would probably show with bigger number of threads on a suitable machine of course.

But in general it would be better to just use "ThreadLocalRandom.current()" everywhere you use "rnd" variable. This is precisely it's purpose - a random number generator that is never contended. The overhead of ThreadLocalRandom.current() call is hardly measurable by itself.

Regards, Peter


http://cr.openjdk.java.net/~bpb/6375303/Bench6375303.java <http://cr.openjdk.java.net/%7Ebpb/6375303/Bench6375303.java> http://cr.openjdk.java.net/~bpb/6375303/6375303-bench.html <http://cr.openjdk.java.net/%7Ebpb/6375303/6375303-bench.html>

Thanks,

Brian

Reply via email to