JAVA常見開發問題

銘銘erom發表於2017-11-30

1、Random類分Math.random()和new Random()兩種,呼叫這個Math.Random()函式能夠返回帶正號的double值,取值範圍是[0.0,1.0),在該範圍內(近似)均勻分佈。因為返回值是double型別的,小數點後面可以保留15位小數,所以產生相同的可能性非常小,在這一定程度上是隨機數。Random():使用一個和當前系統時間對應的相對時間有關的數字作為種子數。 Random(long seed):直接傳入一個種子數。種子就是產生隨機數的第一次使用值,機制是通過一個函式,將這個種子的值轉化為隨機數空間中的某一個點上,並且產生的隨機數均勻的散佈在空間中。以後產生的隨機數都與前一個隨機數有關。所以在使用隨機數的時候不要直接new Random(10),同一個種子,生成N個隨機數,當你設定種子的時候,這N個隨機數是什麼已經確定。相同次數生成的隨機數字是完全相同的。 這樣會導致很大可能產生的數字相同,並不隨機。

ThreadLocalRandom:是JDK 7之後提供併發產生隨機數,能夠解決多個執行緒發生的競爭爭奪。ThreadLocalRandom不是直接用new例項化,而是第一次使用其靜態方法current()。從Math.random()改變到ThreadLocalRandom有如下好處:我們不再有從多個執行緒訪問同一個隨機數生成器例項的爭奪。取代以前每個隨機變數例項化一個隨機數生成器例項,我們可以每個執行緒例項化一個


相關文章