2016-04-23 81 views
1

我想创建一个对象的很多实例,它使用一个随机数作为其初始化的一部分,但是如果我在一个循环中创建大量的这些对象,他们中的大多数将会是相同的(我认为)。有人可以澄清吗?如果我的假设是正确的,是否有办法让他们共享一个Random对象?对象实例之间共享的随机数?

+0

共享相同的随机对象不会帮助。即使是从同一个对象获得重复随机数的概率也是如此。 – Priyamal

+0

取决于随机数的范围和随机数发生器的质量(周期长度)。 –

+0

这个问题有点模糊,但是:一般来说,代码应该使用* same * Random实例。该实例可以与共享任何对象的方式共享。 – user2864740

回答

2

您的对象可以共享一个java.util.Random实例。实际上,这将为您提供最佳性能,而不是每次创建Random的新实例。

如果您正在处理多个线程,即使java.util.Random是线程安全的,您应该考虑使用在JDK 1.7中引入的ThreadLocalRandom,因为它将显着减少线程争用。

例如:

public class ExampleClass { 
    private static final Random random = new Random(); 

    public ExampleClass() { 
     System.out.println("Constructor using random: " + random.nextInt(100)); 
    } 

    public void methodThatUsesRandom() { 
     System.out.println("Method using random: " + random.nextInt(100)); 
    } 
} 
+0

谢谢!正是我所要求的!我怎么能做到这一点? – Scy

+0

有几种方法可以解决这个问题。一种方法是在你的类中定义一个“static final”实例,然后在一个方法中使用它。看到我的帖子上面的例子。 – ck1