Random,ThreadLocalRandom,SecureRandom是Java中的隨機數生成器,其中ThreadLocalRandom是jdk7纔出現的,是Random的加強版。在併發訪問的環境下,使用ThreadLocalRandom來代替Random能夠減小多線程競爭,最終保證系統具備更好的線程安全。web
Random是線程安全的,可是多線程下可能性能比較低。算法
特別是在生成驗證碼的狀況下,不要使用Random,由於它是線性可預測的。因此在安全性要求比較高的場合,應當使用SecureRandom。安全
從理論上來講計算機產生的隨機數都是僞隨機數,要想產生高強度的隨機數,有兩個重要的因素:種子和算法。固然算法是能夠有不少的,可是如何選擇種子是很是關鍵的因素。如Random,它的種子是System.currentTimeMillis(),因此它的隨機數都是可預測的。那麼如何獲得一個近似隨機的種子?這裏有一個很別緻的思路:收集計算機的各類信息,如鍵盤輸入時間,CPU時鐘,內存使用狀態,硬盤空閒空間,IO延時,進程數量,線程數量等信息,來獲得一個近似隨機的種子。這樣的話,除了理論上有破解的可能,實際上基本沒有被破解的可能。而事實上,如今的高強度的隨機數生成器都是這樣實現的。多線程