【Android】生成随机数

几种动态生成随机数的方法:

  1. 使用System#currentTimeMillis()获取一个当前时间毫秒数的long型数字
  2. 使用Random#nextInt(int n)产生一个0到n之间整数
  3. 使用Math#random()返回一个0到1之间的double值
  4. 使用ThreadLocalRandom.nextInt(0, n)生成0到n之间的随机整数
  5. 使用SecureRandom
  6. 使用SplittableRandom#(0,n)生成0到n之间的随机数

前面三种方法比较常见,主要说一下后三种:

  • ThreadLocalRandom: 主要优点在于针对并发编程提高了性能,比Math.random()方法占用更少的资源。
  • SecureRandom:提供加密的强随机数,提高安全性。
  • SplittableRandom:生成一系列均匀伪随机数,主要用于并行计算中隔离的子任务,以确保随机数生成器的独立性和均匀性。不受加密保护,在安全敏感的应用程序中使用SecureRandom

代码示例:

  static int random0() {
    return (int) (SystemClock.uptimeMillis() % MAX_RANGE);
  }

  private static final Random RANDOM = new Random();
  private static int random1() {
    return RANDOM.nextInt(MAX_RANGE);
  }

  private static int random2() {
    return (int) (Math.random() * MAX_RANGE);
  }

  private static int random3() {
    return ThreadLocalRandom.current().nextInt(0, MAX_RANGE);
  }

  private static final SecureRandom SECURE_RANDOM = new SecureRandom();
  private static int random4() {
    return SECURE_RANDOM.nextInt();
  }

  private static int random5() {
    return new SplittableRandom().nextInt(0, MAX_RANGE);
  }

在多个优先级的线程上的性能测试结果:

随机数生成方法多线程测试

在主线程上测Wall Time和CPU Time:

Wall time & CPU time

结论:

 

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试