Java Random 的多线程效率问题

Java Random 的多线程效率问题

缘起

最近在写一个算法的多线程计算时发现效率比单线程还慢,单线程大概计算300S,8个线程却计算了900S,这很不正常。一开始以为是锁的原因,于是把算法里面所有的锁都去掉了(该算法估算几乎不影响最后结果准确性),锁去掉之后还是很慢,时间几乎没有变化。最后打开jconsole查看线程,发现计算的线程显示 阻止1 等待6之类的。观察调用栈发现了卡在random的调用上。

多线程random

Java的random是多线程是安全的,但是Java的random多线程效率存在问题,为此jdk在1.7之后推出了ThreadLocalRandom,它通过一个线程对应一个专属的random实例解决了多线程下random效率的问题。

它的用法如下:

1
ThreadLocalRandom.current()....