use ThreadLocal<Random> instead of creating Random each time

Related to #734 (Thanks @allanwax!)
We can't use ThreadLocalRandom because we need to support JDK6.
So I decided to use ThreadLocal<Random>.

Please review and comment. Thanks!