栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom与Math.random()

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom与Math.random()

Random

Random的本质就是根据设置的种子,执行一个固定的算法得到结果,这就意味着如果多个实例种子一样且调用顺序一致时返回的是同样的结果。默认的种子是System.currentTimeMillis()。线程安全,在多线程下性能较差。

public class RandomDemo {
 
    public static void main(String[] args) {
        // 线程安全,在多线程下性能较差
        Random random1 = new Random(2); // 不设置种子时,种子默认为System.currentTimeMillis(),不会导致以下返回同样结果的问题
        Random random2 = new Random(2);
        Random random3 = new Random(2);
        System.out.println(random1.nextBoolean());  //true
        System.out.println(random1.nextLong()); // 5411842376618821008
        System.out.println(random2.nextLong()); // -4959463499243013640
        System.out.println(random3.nextLong()); // -4959463499243013640  种子一样且调用顺序一致时返回的是同样的结果
    }
 
}
ThreadLocalRandom

ThreadLocalRandom继承自Random。线程安全,在多线程下具有较好的性能,无法设置种子,所以也不会出现种子一致且调用顺序一致时传出现的随机数一致的情况

// 线程安全,在多线程下具有较好的性能,没法设置种子,所以也不会出现种子一致且调用顺序一致时传出现的随机数一致的情况
System.out.println(ThreadLocalRandom.current().nextLong());// 191403865608614265
System.out.println(ThreadLocalRandom.current().nextLong());// 7511566053367412453
System.out.println(ThreadLocalRandom.current().nextLong());// 4667700042531046115
SecureRandom

SecureRandom类收集了一些操作系统的随机事件,比如鼠标点击,键盘点击等等,SecureRandom 使用这些随机事件作为种子。这意味着,种子是不可预测的,一种相对安全的随机数生成器。用来生成密钥之类的安全性较高的随机数。而不像Random默认使用系统当前时间的毫秒数作为种子或者,有规律可寻。

try {
    System.out.println(SecureRandom.getInstance("SHA1PRNG").nextLong());    // -6093059711289970526
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} 
Math.random()

返回0.0和1.0之间的double,其底层其实就是Random.nextDouble()。

// 返回0.0和1.0之间的double
System.out.println(Math.random()); // 0.37397664389057095
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号