生成随机数是很常见的任务。 这也是 JAVA 提供 Random
的原因。但是它在多线程环境中性能并不高。
简单来说,Random
之所以在多线程环境中性能不高的原因是多个线程共享同一个 Random
实例并进行争夺。为了解决这个限制,JAVA 在 JDK 7 中引入了 ThreadLocalRandom
类,用于在多线程环境下生产随机数。
ThreadLocalRandom 强于 Random
ThreadLocalRandom
结合了 Random
和 ThreadLocal
类,并被隔离在当前线程中。因此它通过避免任何对 Random
对象的并发访问,从而在多线程环境中实现了更好的性能。
一个线程获取到的随机数不受另一个线程影响,而 Random
提供全局的随机数。
另外,不同于 Random
, ThreadLocalRandom
明确的不支持设置随机种子。 它重写了 Random
的setSeed(long seed)
方法并直接抛出了 UnsupportedOperationException
异常。