当前位置:网站首页>Four methods of random number generation | random | math | threadlocalrandom | securityrandom
Four methods of random number generation | random | math | threadlocalrandom | securityrandom
2022-07-05 19:50:00 【Bulst】
List of articles
Random
Random Generate random number , There's a constructor , Delivered long Type value , When using empty constructs , In fact, what is conveyed is System.nanoTime() , That is, the value of milliseconds of the current time .
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
public Random(long seed) {
if (getClass() == Random.class)
this.seed = new AtomicLong(initialScramble(seed));
else {
// subclass might have overriden setSeed
this.seed = new AtomicLong();
setSeed(seed);
}
}
Parameters are also called seeds . Generally, it is enough to use null parameter construction , If you specify the value of the seed , Then the generated random numbers are the same , So seeds cannot be written dead .
Java.util.Random The random algorithm implemented in class is pseudorandom , That is to say, random with rules , Is to give seed Randomly generated numbers in the interval of .
Of the same number of seeds Random object , The random numbers generated are exactly the same .
Random It's thread safe , Inside Seed Global variable , When multiple threads generate random numbers , Used cas .
private final AtomicLong seed;
Math.random()
More commonly used methods of generating random numbers , Default 0.0-1.0 Decimal between 【 Left closed right away 】
Its bottom layer calls Random Is a parameter - free construction method , And it cannot be set seed value .
// The underlying call Random Parameter free constructor
double mathRandom = Math.random();
System.out.println(mathRandom);
public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}
ThreadLocalRandom
ThreadLocalRandom yes Java7 Newly added , For concurrent use of multiple threads , Velocity ratio Random Be quick .
ThreadLocalRandom It's through ThreadLocal Improved tool class for random generation , Each thread holds a separate , There is no competition
ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
int threadLocalRandomValue = threadLocalRandom.nextInt(10);
System.out.println(threadLocalRandomValue);
The construction method is private , It can only be in singleton mode , Cannot set seed.
SecurityRandom
SeurityRandom Built in two random number algorithms ,NativePrRNG and SHA1PRNG . adopt new To create , By default NavivePRNG The algorithm generates random numbers , It can also be modified through parameters .
It can also be done through getInstance To initialize the object , Just have a parameter passing algorithm name , The second parameter specifies the algorithm package ,SHA1PRNG Performance ratio of NATIVEPRNG Double the performance , You can set seed , If seed Fix , Then the random result will remain the same .
SecureRandom instance = SecureRandom.getInstanceStrong();
// SecureRandom instance = new SecureRandom();
int instanceValue = instance.nextInt(10);
System.out.println(instanceValue);
SecureRandom instance = SecureRandom.getInstance("SHA1PRNG");
// Set seed value , The result remains unchanged.
instance.setSeed(1);
int instanceValue = instance.nextInt(10);
System.out.println(instanceValue);
JvmRandom
It is essentially the same as Math.random() equally , It's also true Random A kind of , Realize in commons-lang It's a bag .
JVMRandom jvmRandom = new JVMRandom();
int i = jvmRandom.nextInt(10);
System.out.println(i);
public int nextInt(int n) {
return SHARED_RANDOM.nextInt(n);
}
private static final Random SHARED_RANDOM = new Random();
边栏推荐
- Float. The specific meaning of the return value of floattorawintbits is to convert float into byte array
- ACM getting started Day1
- 安卓面试宝典,2022Android面试笔试总结
- Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables
- 再忙不能忘安全
- MMO项目学习一:预热
- PHP利用ueditor实现上传图片添加水印
- What is the function of okcc call center
- How MySQL queries and modifies JSON data
- Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
猜你喜欢

大厂面试必备技能,2022Android不死我不倒

建议收藏,我的腾讯Android面试经历分享

40000 word Wenshuo operator new & operator delete

Do you know several assertion methods commonly used by JMeter?

acm入门day1

不愧是大佬,字节大牛耗时八个月又一力作

Zhongang Mining: analysis of the current market supply situation of the global fluorite industry in 2022
The problem of returning the longtext field in MySQL and its solution

Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022

【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp
随机推荐
常用运算符与运算符优先级
aggregate
Force buckle 1200 Minimum absolute difference
Summer Challenge database Xueba notes, quick review of exams / interviews~
Using repositoryprovider to simplify the value passing of parent-child components
Is it safe for China Galaxy Securities to open an account? Securities account opening
Fundamentals of shell programming (Chapter 9: loop)
【obs】QString的UTF-8中文转换到blog打印 UTF-8 char*
什么是面上项目
Android interview classic, 2022 Android interview written examination summary
How MySQL queries and modifies JSON data
c——顺序结构
【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
The city chain technology Digital Innovation Strategy Summit was successfully held
软件测试工程师是做什么的?待遇前景怎么样?
深度學習 卷積神經網絡(CNN)基礎
C#应用程序界面开发基础——窗体控制(5)——分组类控件
Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables
力扣 729. 我的日程安排表 I
再忙不能忘安全