2015-10-14 28 views
0

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

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

enter image description here

+0

那么,使用本地创建的'Random'实例需要JVM的优化器发现它是纯粹的本地(以避免同步),而ThreadLocalRandom本来就是纯粹的本地... – Holger

回答

2

如果你创建你自己的线程,就像你在这里做,这都没有区别。

但是,如果您的代码是从您的控制之外的不同线程调用的,则ThreadLocalRandom是正确的。

虽然有一点很重要,但由于显而易见的原因,您无法为ThreadLocalRandom设置种子。所以如果你想要有可重复的序列,你需要创建你自己的Random实例。 (但是如果你运行多个线程,让你的RNG接种相同的值并不总能保证可重复的行为。)

我个人会在我不需要可重复序列的情况下使用ThreadLocalRandom