在Java中,我们可以使用以下类创建随机数:,,.让我们看一下它们每个的快速示例,然后我们将讨论它们的区别。RandomSecureRandomThreadLocalRandomSplittableRandom拆分表随机packagecom.logicbig.example;importjava.util.SplittableRandom;publicclassSplittableRandomExample{publicstaticvoidmain(String[]args){//创建一个随机intSystem.out.println("--single随机整数--");inti=newSplittableRandom().nextInt(10,100);System.out.println(i);//创建整数流System.out.println("--stream--");新的SplittableRandom().ints(5,10,100).forEach(System.out::println);}}--单个随机整数--49--流--7335504488安全随机包com.logicbig.example;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjava.util.concurrent.ThreadLocalRandom;publicclassSecureRandomExample{publicstaticvoidmain(String[]args)throwsNoSuchAlgorithmException{//创建一个随机intSystem.out.println("--singlerandomint--");inti=new安全eRandom().nextInt(100);System.out.println(i);//创建整数流System.out.println("--stream--");新的SecureRandom().ints(5,10,100).forEach(System.out::println);}}--singlerandomint--13--stream--8073923092线路本机packagecom.logicbig.example;importjava.util.concurrent.ThreadLocalRandom;publicclassThreadLocalRandomExample{publicstaticvoidmain(String[]args){//创建一个随机整数System.out.println("--singlerandomint--");inti=ThreadLocalRandom.current().nextInt(10,100);System.out.println(i);//创建整数流System.out.println("--stream--");ThreadLocalRandom.current().ints(5,10,100).forEach(System.out::println);}}--单个随机整数--40--流--2341954433随机包com.logicbig.example;importjava.util.Random;importjava.util.concurrent.ThreadLocalRandom;publicclassRandomExample{publicstaticvoidmain(String[]args){//创建一个随机intSystem.out.println("--singlerandomint--");inti=newRandom().nextInt(100);System.out.println(i);//创建整数流System.out.println("--stream--");newRandom().ints(5,10,100).forEach(System.out::println);}}--singlerandomint--18--stream--1360416832java.util.Random的区别是线程安全的但是,跨线程并发使用同一个java.util.Random实例可能会遇到争用和随之而来的不良表现。自Java1.0以来,java.security.SecureRandom类提供了密码学上强大的随机数生成器。我们应该在安全敏感的应用程序中使用它。从Java1.1开始,java.util.concurrent.ThreadLocalRandom将随机数生成器隔离到当前线程。使用内部生成的种子为当前线程初始化单个实例,单个线程可以通过该方法一次又一次地访问该种子。该生成器的开销和争用比.自Java1.7ThreadLocalRandom.current()java.util.Randomjava.util.SplittableRandom是一个高性能的随机数生成器。SplittableRandom的单个实例不是线程安全的。它们旨在跨线程拆分,而不是共享。例如,使用随机数的fork/join样式计算可能包括newSubtask(aSplittableRandom.split()).fork()形式的构造。它们适用于使用Java8流进行并行计算。拆分任务每次连接时总是产生相同的结果,因此它们是确定性的,而ThreadLocalRandom则没有。自Java1.8以来,上述每个类都有不同的方法(或多或少)来生成单个整数、浮点数、双精度数、长整数、布尔值,因此上述每个类都有不同的方法来生成IntStream、DoubleStream和LongStream。
