我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java随机数以及多线程下的随机数用法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java随机数以及多线程下的随机数用法

本篇内容主要讲解“Java随机数以及多线程下的随机数用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java随机数以及多线程下的随机数用法”吧!

Java中的随机数

我们需要在Java中随机生成一个数字。java开发中我们通常使用java.util.Random来搞,它提供了一种伪随机的生成机制。Jvm  通过传入的种子(seed)来确定生成随机数的区间,只要种子一样,获取的随机数的序列就是一致的。而且生成的结果都是可以预测的。是一种伪随机数的实现,而不是真正的随机数。来确定使用的但是有些用例直接使用可能会导致一些意想不到的问题。Random的一个普遍用法:

// Random 实例 Random random = new Random(); //调用 nextInt() 方法 此外还有nextDouble(), nextBoolean(), nextFloat(), ... random.nextInt();

或者,我们可以使用java中的数学计算类:

Math.random();

Math类只包含一个Random实例来生成随机数:

public static double random() {  Random rnd = randomNumberGenerator;  if (rnd == null) {  // 返回一个新的Random实例  rnd = initRNG();  }  return rnd.nextDouble();  }

java.util.Random的用法是线程安全的。但是,在不同线程上并发使用相同的Random实例可能会导致争用,从而导致性能不佳。其原因是使用所谓的种子来生成随机数。种子是一个简单的数字,它为生成新的随机数提供了基础。我们来看看Random中的next(int  bits)方法:

protected int next(int bits) {  long oldseed, nextseed;  AtomicLong seed = this.seed;  do {  oldseed = seed.get();  nextseed = (oldseed * multiplier addend) & mask;  } while (!seed.compareAndSet(oldseed, nextseed));  return (int)(nextseed >>> (48 - bits));}

首先,旧种子和新种子存储在两个辅助变量上。在这一点上,创造新种子的原则并不重要。要保存新种子,使用compareAndSet()方法将旧种子替换为下一个新种子,但这仅仅在旧种子对应于当前设置的种子的条件下才会触发。如果此时的值由并发线程操纵,则该方法返回false,这意味着旧值与例外值不匹配。因为是循环内进行的操作,那么会发生自旋,直到变量与例外值匹配。这可能会导致性能不佳和线程竞争。

多线程下的随机数

如果更多线程主动生成具有相同Random的实例的新随机数,则上述情况发生的概率越高。对于生成许多(非常多)随机数的程序,不建议使用这种方式。在这种情况下,您应该使用ThreadLocalRandom,它在1.7版本中添加到Java中。ThreadLocalRandom扩展了Random并添加选项以限制其使用到相应的线程实例。为此,ThreadLocalRandom的实例保存在相应线程的内部映射中,并通过调用current()来返回对应的Random。使用方式如下:

ThreadLocalRandom.current().nextInt()

安全的随机数

通过对Random的一些分析我们可以知道Random事实上是伪随机,是可以推导出规律的,而且依赖种子(seed)。如果我们搞抽奖或者其他一些对随机数敏感的场景时,用Random就不合适了,容易被人钻空子。JDK提供了SecureRandom来解决这个事情。

SecureRandom是强随机数生成器,它可以产生高强度的随机数,产生高强度的随机数依赖两个重要的因素:种子和算法。算法是可以有很多的,通常如何选择种子是非常关键的因素。  Random的种子是System.currentTimeMillis(),所以它的随机数都是可预测的,  是弱伪随机数。强伪随机数的生成思路:收集计算机的各种信息,键盘输入时间,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,CPU时钟,来得到一个近似随机的种子,主要是达到不可预测性。说的更通俗就是,使用加密算法生成很长的一个随机种子,让你无法猜测出种子,也就无法推导出随机序列数。

到此,相信大家对“Java随机数以及多线程下的随机数用法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java随机数以及多线程下的随机数用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java随机数以及多线程下的随机数用法

本篇内容主要讲解“Java随机数以及多线程下的随机数用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java随机数以及多线程下的随机数用法”吧!Java中的随机数我们需要在Java中随机生成一
2023-06-16

java随机数生成的方法

本文小编为大家详细介绍“java随机数生成的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“java随机数生成的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。本教程操作环境:windows7系统、java
2023-06-30

JAVA随机数的方法有哪些

本篇内容介绍了“JAVA随机数的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法1://利用固定数组长度n,通过n的变化来实现。
2023-06-17

java生成随机数的三种方法

随机数有三种生成方式:1、通过Math.random()方法2、通过System.currentTimeMillis()方法获取毫秒数3、通过Random类第一种:常用方法Math.random()方法,是获取0-1之间的double类型的小数,在通过int类
java生成随机数的三种方法
2014-08-11

java不同版本在多线程中使用随机数生成器的实现

本文主要介绍了java不同版本在多线程中使用随机数生成器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-15

java不同版本在多线程中怎么使用随机数生成器

这篇文章主要讲解了“java不同版本在多线程中怎么使用随机数生成器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java不同版本在多线程中怎么使用随机数生成器”吧!如何在多线程中使用随机数生
2023-07-05

java生成不重复随机数的方法

Java中产生随机数1、调用java.lang下面Math类中的random()方法产生随机数新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码:public class MyRandom {public static voi
java生成不重复随机数的方法
2016-11-18

java中获取不同随机数的方法

三种生成方式:1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。2、通过Math.random()返回一个0到1之间的double值。3、通过Random类来产生一个随机数,这个是专业的Random工具类,功
java中获取不同随机数的方法
2021-03-18

java生成随机数的方法有哪些

Java生成随机数的方法有以下几种:1. 使用`java.util.Random`类:可以使用`nextInt()`方法生成一个随机整数,也可以使用`nextDouble()`方法生成一个随机浮点数。2. 使用`Math.random()`
2023-08-31

使用java怎么一次生成多个随机数

这期内容当中小编将会给大家带来有关使用java怎么一次生成多个随机数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、
2023-06-14

使用numpy生成随机数的方法

numpy是一个在Python中非常常用的科学计算库,它提供了许多快速、高效的数值操作和数据处理函数。在numpy中,我们可以很方便地生成随机数。本文将介绍numpy中生成随机数的方法,并给出具体的代码示例。numpy中生成随机数的函数主
使用numpy生成随机数的方法
2024-01-26

java中产生随机不重复数的方法

java中产生随机不重复数的方法:根据min和max,生成n个不重复的随机数。(注:范围[min,max],n ( max - min + 1 )){ return null; } // 将所有的可能出现的数
java中产生随机不重复数的方法
2021-01-15

Python随机数种子的使用方法

本篇内容介绍了“Python随机数种子的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录1. 随机数种子2. numpy中的随机数
2023-06-20

java随机生成数字的方法有哪些

Java随机生成数字的方法有以下几种:1. 使用java.util.Random类:可以使用Random类的nextInt()方法生成随机整数,以及nextDouble()方法生成随机浮点数。```javaimport java.util.
2023-08-09

Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结

本文实例讲述了Java编程实现从给定范围内随机N个不重复数生成随机数的方法。分享给大家供大家参考,具体如下:一、JAVA中生成随机数的方式1、在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其
2023-05-31

java中生成随机数的方法有哪些

这篇文章将为大家详细讲解有关java中生成随机数的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。生成随机数的几种方法:1. 使用Math.random()生成随机数直接贴几个小方法/*** 获取
2023-05-31

使用java怎么生成不同的随机数

这期内容当中小编将会给大家带来有关使用java怎么生成不同的随机数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3.
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录