2012-02-05 31 views
13

我需要生成一個受控序列的僞隨機數,給定一個初始整數參數。爲此,我使用標準Java Random類,由一個整數參數播種。我希望確保在可預見的未來(以及更多!),我將在系統(操作系統,但也包括Java/JDK版本)上生成相同的序列。跨系統和版本的Java僞隨機數的重複性?

總結:請問Java的保證重複性/便攜的它的僞隨機數生成器跨實施版本?

注意:我已經問了the exact same question for Python。我自從將實現語言更改爲Java,但出於其他原因。

+1

只要不重複使用多個線程中的同一個生成器,它應該沒問題。現在不要讓這個評論錯誤:生成器本身是線程安全的,但是如果你使用同一個生成器從不同的線程生成數字,你將無法始終如一地重現來自你的各個線程的調用在各種系統上訂購(甚至不在同一系統上的各種運行中)。 – TacticalCoder 2012-02-05 19:13:54

+0

情況並非如此,但感謝提示。那麼,準確地說,你可以使用適當的鎖定機制在幾個線程內複製相同的序列,但我同意你的問題。 – 2012-02-27 12:43:29

回答

14

是的。

javadoc說明:

這個類的一個實例是用於生成僞隨機數流。該類使用48位種子,使用線性同餘公式進行修改。 (參見高德納,計算機程序設計,第2卷,第3.2.1節的藝術。)

如果Random兩個實例使用相同的種子創建,並且方法的相同序列調用爲每個製成,它們將生成並返回相同的數字序列。爲了保證此屬性,特定的算法被指定爲類Random。爲了Java代碼的絕對可移植性,Java實現必須使用class Random這裏顯示的所有算法。 但是,class Random的子類被允許使用其他算法,只要它們遵守所有方法的一般合同。