每个线程的ThreadLocalRandom或new Random

时间:2015-10-14 13:13:12

标签: java multithreading random concurrency

当我在每个线程中创建新的java.util.Random对象或使用ThreadLocalRandom.current()时,有什么不同.nextInt(3); ?根据我的阅读,应该使用ThreadLocalRandom而不是为所有线程使用相同的java.util.Random实例,但是如果为每个线程创建一个新实例会怎样?

我什么时候应该使用java.util.Random?当ThreadLocalRandom需要在多个线程中生成随机数时?

enter image description here

1 个答案:

答案 0 :(得分:2)

如果你创建自己的线程,就像你在这里一样,它没有任何区别。

但是,如果您的代码是从您无法控制的不同线程调用的,那么ThreadLocalRandom是正确的。

但有一个区别是重要的:出于显而易见的原因,您无法为ThreadLocalRandom设置种子。因此,如果您想拥有可重复的序列,则需要创建自己的Random实例。 (但是,如果您正在运行多个线程,那么将您的RNG播种到相同的值并不总是保证可重复的行为。)

在我不需要可重复序列的所有情况下,我会亲自使用ThreadLocalRandom