iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java随机数以及多线程下的随机数用法
  • 355
分享到

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

2023-06-16 20:06:37 355人浏览 安东尼
摘要

本篇内容主要讲解“Java随机数以及多线程下的随机数用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java随机数以及多线程下的随机数用法”吧!Java中的随机数我们需要在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随机数以及多线程下的随机数用法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java随机数以及多线程下的随机数用法

本文链接: https://www.lsjlt.com/news/284980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Java随机数以及多线程下的随机数用法
    本篇内容主要讲解“Java随机数以及多线程下的随机数用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java随机数以及多线程下的随机数用法”吧!Java中的随机数我们需要在Java中随机生成一...
    99+
    2023-06-16
  • Python如何生成随机数及random随机数模块应用
    目录1、随机生成0-1的浮点数random.random2、随机生成指定范围内的浮点数random.uniform3、随机生成指定范围整数random.randint4、随机从给定集...
    99+
    2024-04-02
  • java随机数生成的方法
    本文小编为大家详细介绍“java随机数生成的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“java随机数生成的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。本教程操作环境:windows7系统、java...
    99+
    2023-06-30
  • Java中的随机数Random
    一个用于生成随机数的类 具体用法:   //创建随机数对象         Random random = new Random();         //随机产生一个int类型取...
    99+
    2024-04-02
  • java随机数random怎么用
    在Java中,可以使用java.util.Random类生成随机数。以下是一些使用随机数的常见方法:1. 生成一个随机的整数:```...
    99+
    2023-08-30
    java
  • python生成随机数、随机字符、随机字符串的方法示例
    本文是基于Windows 10系统环境,实现python生成随机数、随机字符、随机字符串: Windows 10 PyCharm 2018.3.5 for Windows ...
    99+
    2024-04-02
  • JAVA随机数的方法有哪些
    本篇内容介绍了“JAVA随机数的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法1://利用固定数组长度n,通过n的变化来实现。...
    99+
    2023-06-17
  • mysql如何生成指定位数的随机数及批量生成随机数
    小编给大家分享一下mysql如何生成指定位数的随机数及批量生成随机数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 先介绍几...
    99+
    2024-04-02
  • Java 随机数的获得方法(5种)
    1. Math.random() 静态方法 产生的随机数是 0 - 1 之间的一个 double,即 0 ...
    99+
    2023-10-25
    java 开发语言
  • 常用的python随机数
    python中的随机数模块:random函数:uniform :随机浮点数>>> print random.uniform(0,100) 37.5204548309randint :随机整数>>> pri...
    99+
    2023-01-31
    随机数 常用 python
  • Java中的随机数有哪些
    本篇内容介绍了“Java中的随机数有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!众所周知,随机数是任何一种编程语言最基本的特征之一。而...
    99+
    2023-06-17
  • java不同版本在多线程中使用随机数生成器的实现
    目录如何在多线程中使用随机数生成器(Random)Random 是通过 seed 进行同步的吗ThreadLocalRandom 生成随机数的示例如何在多线程中使用随机数生成器(Ra...
    99+
    2023-05-15
    java 随机数生成器 java多线程随机数生成
  • java一次怎么生成多个随机数
    这篇文章主要介绍了java一次怎么生成多个随机数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java一次怎么生成多个随机数文章都会有所收获,下面我们一起来看看吧。本教程操作环境:windows7系统、java...
    99+
    2023-06-30
  • java不同版本在多线程中怎么使用随机数生成器
    这篇文章主要讲解了“java不同版本在多线程中怎么使用随机数生成器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java不同版本在多线程中怎么使用随机数生成器”吧!如何在多线程中使用随机数生...
    99+
    2023-07-05
  • java生成随机数的方法有哪些
    Java生成随机数的方法有以下几种:1. 使用`java.util.Random`类:可以使用`nextInt()`方法生成一个随机...
    99+
    2023-08-31
    java
  • javaScript添加随机数的方法
    这篇文章主要介绍了javaScript添加随机数的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在javascript中,可以使用“Math.random()”添加随机数...
    99+
    2023-06-14
  • numpy生成随机数的方法
    numpy生成随机数的方法有:1、numpy.random.rand();2、numpy.random.randn();3、numpy.random.randint();4、numpy.random.random();5、numpy.ran...
    99+
    2023-11-21
    numpy
  • Qt生成随机数的方法
    目录1.生成随机数2.生成不重复的随机数3.生成递增的随机数1.生成随机数         生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <Q...
    99+
    2024-04-02
  • 使用java怎么一次生成多个随机数
    这期内容当中小编将会给大家带来有关使用java怎么一次生成多个随机数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、...
    99+
    2023-06-14
  • Java和C的随机数(Random)详解
    目录一、前言二、随机数的创建步骤1.导包2.创建对象:3.数据接收三、Java随机数游戏四、c语言的猜数字示例图:总结一、前言 前面我们学习了Java中的运算符,对运算符也有一些了...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作