内容简介:几种动态生成随机数的方法:前面三种方法比较常见,主要说一下后三种:代码示例:
几种动态生成随机数的方法:
- 使用 System#currentTimeMillis() 获取一个当前时间毫秒数的long型数字
- 使用 Random#nextInt(int n) 产生一个0到n之间整数
- 使用 Math#random() 返回一个0到1之间的double值
- 使用 ThreadLocalRandom.nextInt(0, n) 生成0到n之间的随机整数
- 使用 SecureRandom
- 使用 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:
结论:
- ThreadLocalRandom 在性能上表现最佳
- SecureRandom 开销最大,非涉及加密场景应避免使用
- SplittableRandom 在普通场景下没有明显优势
(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)
以上所述就是小编给大家介绍的《【Android杂谈】生成随机数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
代码大全(第2版)
[美] 史蒂夫·迈克康奈尔 / 金戈、汤凌、陈硕、张菲 译、裘宗燕 审校 / 电子工业出版社 / 2006-3 / 128.00元
第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初......一起来看看 《代码大全(第2版)》 这本书的介绍吧!