首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 隨機數生成完全指南:Math.random 與 Random 類最佳實踐

     編輯:Java 綜合教學

Java 隨機數生成完全指南:Math.random 與 Random 類最佳實踐

隨機數是遊戲、加密、採樣、測試等場景的基礎設施。Java 提供 Math.random() 與 java.util.Random 兩種主流方式,本文對比其特性、適用場景與陷阱。

一、Math.random() — 簡單快速的靜態工具

  • 回傳 double,範圍 [0.0, 1.0)
  • 線程安全,內部共享單一 Random 實例
  • 常用轉換:(int)(Math.random() * n) → [0, n) 整數
// 產生 0~99 隨機整數
int r = (int) (Math.random() * 100);

適用:簡單臨時需求、單線程或低併發場景。

二、java.util.Random — 功能完整的偽隨機引擎

  • nextInt(n) 直接產生 [0, n) 整數,n 必須為正數,否則拋 IllegalArgumentException
  • 支援 nextLong()、nextDouble()、nextBoolean()、nextGaussian() 等分布
  • 偽隨機本質:相同種子 (seed) 產生的序列完全相同,可用於測試複現
Random r1 = new Random(123L);
Random r2 = new Random(123L);
System.out.println(r1.nextInt(2000) == r2.nextInt(2000)); // true

三、進階選型建議

場景推薦方案理由
一般業務邏輯、測試資料ThreadLocalRandom.current() (Java 7+)無競爭、效能優於共享 Random
高併發環境ThreadLocalRandom 或 SplittableRandom (Java 8+)無鎖設計、支援分治並行
加密、安全令牌、金融級SecureRandom密碼學強度、不可預測
可複現測試、除錯new Random(fixedSeed)確定性序列

四、常見坑點提醒

  • Random 非線程安全,多線程共享實例會導致種子爭用、效能下降
  • nextInt(n) 參數為負數直接拋異常,務必校驗
  • 大量生成時避免頻繁 `new Random()`,種子可能重複 (系統時間精度限制)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved