Random在并发环境下的替代者ThreadLocalRandom
ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。
常用方法:
public static void main(String[] args) {
//创建ThreadLocalRandom实例
ThreadLocalRandom random = ThreadLocalRandom.current();
//生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
System.out.println(random.nextBoolean());
//生成一个随机的double值,数值介于[0,1.0)之间。
System.out.println(random.nextDouble());
//生成一个随机的double值,数值介于[0,5.0)之间。
System.out.println(random.nextDouble(5));
//生成一个随机的double值,数值介于[1,5.0)之间。
System.out.println(random.nextDouble(1, 5));
//生成在-2^31到2^31-1之间int值
System.out.println(random.nextInt());
//生成一个介于[0,n)的区间int值,包含0而不包含n
System.out.println(random.nextInt(10));
//生成在[a,b)之间int值
System.out.println(random.nextInt(1, 20));
//返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的float值
System.out.println(random.nextFloat());
//生成一个范围是-2^64到2^64-1的long值,它是取自此随机数生成器序列的均匀分布的long值。
System.out.println(random.nextLong());
//生成一个介于[0,n)的区间long值,包含0而不包含n
System.out.println(random.nextLong(20L));
//生成在[a,b)之间long值
System.out.println(random.nextLong(1L, 30L));
//返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
System.out.println(random.nextGaussian());
//相同种子数的Random对象,相同次数生成的随机数字是完全相同的
//如果想避免出现随机数字相同的情况,则需要注意,无论项目中需要生成多少个随机数字,都只使用一个Random对象即可。
//特别说明:ThreadLocalRandom不允许重新设置种子数,即调setSeed()方法会抛异常
Random r1 = new Random(10);
Random r2 = new Random(10);
for (int i = 0; i < 2; i++) {
System.out.println(r1.nextInt() + "<->" + r2.nextInt());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix