博客
关于我
Java指定区间返回随机数
阅读量:789 次
发布时间:2023-01-24

本文共 1621 字,大约阅读时间需要 5 分钟。

在 Java 开发中,充分利用随机数生成功能是非常重要的。程序员常用的两个类是 java.util.Randomjava.util.concurrent.ThreadLocalRandom。这里将分别介绍这两种类的使用方法,以及它们适用的场景。

使用 java.util.Random

这类是比较传统的随机数生成工具,常用于单线程程序中。主要方法是 nextInt(int),但这个方法通常生成的范围较大,需要通过计算落在指定区间的值来实现定制范围。

例如,以下代码实现了一个在 [10, 20] 范围内生成随机整数的方法:

import java.util.Random;public class RandomNumberTest {    public static void main(String[] args) {        Random rand = new Random();        int min = 10;        int max = 20;        int randomNumber = rand.nextInt(max - min + 1) + min;        System.out.println("生成的随机数是: " + randomNumber);    }}

这里的 nextInt(int) 方法指定了一个区间长度,减去后加上起点可以确保结果不会超出指定范围。

适用场景:如果只是用于单线程环境下的简单随机数生成,这种方法已经足够了。它不仅简单,而且性能也非常不错。特别是在没有多线程需求的情况下,使用 Random 类会更省资源。

使用 java.util.concurrent.ThreadLocalRandom

相比于 Random 类,ThreadLocalRandom 类在多线程环境中表现更加优异。这个类默认使用高质量的随机数生成器,并且每个线程都有自己的随机数生成器实例,避免了不可预见的交叉影响。

以下例子展示了如何在 [5, 15] 范围内生成一个随机数:

import java.util.concurrent.ThreadLocalRandom;public class ThreadLocalRandomTest {    public static void main(String[] args) {        int min = 5;        int max = 15;        int randomNumber = ThreadLocalRandom.current().nextInt(min, max + 1);        System.out.println("生成的随机数是: " + randomNumber);    }}

需要注意的是,ThreadLocalRandom.nextInt(int, int) 方法的第二个参数是上限不包含的最大值。确保这点在编写代码时也要小心。

适用场景:如果程序需要在多线程环境中生成随机数,这个类就是更好的选择。它保证了分布的均匀性和一致性,特别是在高并发的场景下,表现会更加优异。

注意事项

  • 状态维护ThreadLocalRandom 类每个线程维护自己的分布种子,这样可以避免种子干扰的问题,但也要注意分布的一致性。
  • 性能影响:虽然 ThreadLocalRandom 提供了更好的分布质量,但它在单线程下可能会稍微增加一些性能开销。
  • 方法使用要点nextInt(下界, 上界) 方法会生成一个在任意区间 [下界, upperExclusive) 范围内的随机数。

综上所述,无论是在单线程还是多线程环境下,Java 都提供了非常灵活和强大的随机数生成工具。选择 Random 还是 ThreadLocalRandom,取决于具体应用的需求和开发场景。

转载地址:http://yleyk.baihongyu.com/

你可能感兴趣的文章
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
查看>>
Kubernetes 无法查询到并且无法删除pod实例的排查过程
查看>>
android中button修改不了背景颜色
查看>>
github 入门
查看>>
温故知新,.Net Core遇见Consul(HashiCorp),实践分布式服务注册与发现
查看>>
HTML 表单验证
查看>>
python解释器环境问题
查看>>
uni-app快速导入自己需要的插件
查看>>
编写xor_shellcode.py
查看>>
Echarts笔记
查看>>
Ubuntu 20.04 Docker 安装并配置
查看>>
在 eclipse 中将 web 项目部署到 tomcat 服务器上
查看>>
iOS关于申请公司开发者账号缴费支付
查看>>
Laravel 直接返回404页面
查看>>
常用元素操作的方法
查看>>
解决 matplotlib 中文显示乱码的问题
查看>>
解决打开 json 文件中文乱码的问题
查看>>
计算机网络基础:PKI(公钥基础设施)
查看>>
计算机网络基础:VLAN(虚拟局域网)
查看>>
计算机网络基础:文件共享服务器(注册表更改)
查看>>