在Java中创建随机数的不同方法

开发 前端
每个类都有各种方法(或多或少)来生成单独的整数、浮点数、双精度、长整型、布尔值、 上面的每个类都有各种方法来生成 IntStream、DoubleStream 和 LongStream。

在 Java 中,我们可以使用以下类创建随机数:、、.让我们看看它们中的每一个的快速示例,然后我们将讨论它们的差异。RandomSecureRandomThreadLocalRandomSplittableRandom

拆分表随机

package com.logicbig.example;

import java.util.SplittableRandom;

public class SplittableRandomExample {
public static void main(String[] args){
//creating a random int
System.out.println("-- single random int --");
int i = new SplittableRandom().nextInt(10, 100);
System.out.println(i);
//creating stream of ints
System.out.println("-- stream --");
new SplittableRandom()
.ints(5, 10, 100)
.forEach(System.out::println);
}
}
-- single random int --
49
-- stream --
73
35
50
44
88

安全随机

package com.logicbig.example;

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.concurrent.ThreadLocalRandom;

public class SecureRandomExample {
public static void main(String[] args) throws NoSuchAlgorithmException {
//creating a random int
System.out.println("-- single random int --");
int i = new SecureRandom().nextInt(100);
System.out.println(i);
//creating stream of ints
System.out.println("-- stream --");
new SecureRandom()
.ints(5, 10, 100)
.forEach(System.out::println);
}
}
-- single random int --
13
-- stream --
80
73
92
30
92

线程本地随机

package com.logicbig.example;

import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {
public static void main(String[] args) {
//creating a random int
System.out.println("-- single random int --");
int i = ThreadLocalRandom.current().nextInt(10, 100);
System.out.println(i);
//creating stream of ints
System.out.println("-- stream --");
ThreadLocalRandom.current()
.ints(5, 10, 100)
.forEach(System.out::println);
}
}
-- single random int --
40
-- stream --
23
41
95
44
33

随机

package com.logicbig.example;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class RandomExample {
public static void main(String[] args){
//creating a random int
System.out.println("-- single random int --");
int i = new Random().nextInt(100);
System.out.println(i);
//creating stream of ints
System.out.println("-- stream --");
new Random().ints(5, 10, 100)
.forEach(System.out::println);
}
}
-- single random int --
18
-- stream --
13
60
41
68
32

差异

  • java.util.Random它是线程安全的。但是,跨线程并发使用同一个 java.util.Random 实例可能会遇到争用和随之而来的性能不佳。
    自 Java 1.0 以来
  • java.security.SecureRandom此类提供加密强度高的随机数生成器。我们应该在安全敏感的应用程序中使用它。
    从 Java 1.1 开始
  • java.util.concurrent.ThreadLocalRandom隔离到当前线程的随机数生成器。使用内部生成的种子为当前线程初始化单个实例,单个线程可以通过方法一遍又一遍地访问该种子。与 相比,此生成器遇到的开销和争用要少得多。
    从 Java 1.7 开始ThreadLocalRandom.current()java.util.Random
  • java.util.SplittableRandom它是高性能的随机数生成器。SplittableRandom 的单个实例不是线程安全的。它们被设计为跨线程拆分,而不是共享。例如,使用随机数的fork/join样式计算可能包括新Subtask(aSplittableRandom.split()).fork()形式的构造。
    它们适用于 Java 8 流的并行计算。每次加入拆分任务时,它们始终会产生相同的结果,因此它们是确定性的,ThreadLocalRandom 没有该特征。从 Java 1.8 开始

上述每个类都有各种方法(或多或少)来生成单独的整数、浮点数、双精度、长整型、布尔值、 上面的每个类都有各种方法来生成 IntStream、DoubleStream 和 LongStream。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2021-06-01 22:31:57

区块链随机数技术

2012-03-22 09:31:14

Java

2011-07-08 15:11:03

JAVA

2014-04-25 10:14:39

2019-09-11 10:09:00

Java虚拟机算法

2009-06-11 15:16:18

不重复随机数Java

2009-07-06 15:11:18

Java 随机数

2021-12-25 23:17:52

Windows 11Windows微软

2015-10-13 10:00:58

Swift随机数使用总结

2010-10-09 15:35:25

MySQL rand函

2009-06-17 17:37:43

Java随机数

2010-09-06 17:40:59

SQL函数

2010-02-01 17:02:53

C++产生随机数

2019-09-26 08:07:06

RHEL8命令Linux

2010-09-02 10:15:46

SQL删除

2021-12-27 09:31:20

HashtableJava随机数

2012-06-08 03:36:30

C#Java

2010-02-23 14:24:50

WCF状态保存

2024-01-25 11:32:21

2020-04-20 14:30:54

UbuntuLinux内核
点赞
收藏

51CTO技术栈公众号