2016-04-23 83 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