当前位置:网站首页>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();
边栏推荐
- PG basics -- Logical Structure Management (user and permission management)
- S7-200SMART利用V90 MODBUS通信控制库控制V90伺服的具体方法和步骤
- 【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台
- Apprentissage du projet MMO I: préchauffage
- Two pits exported using easyexcel template (map empty data columns are disordered and nested objects are not supported)
- Microwave radar induction module technology, real-time intelligent detection of human existence, static micro motion and static perception
- Common - Hero Minesweeper
- How to convert word into PDF? Word to PDF simple way to share!
- 力扣 1200. 最小绝对差
- [AI framework basic technology] automatic derivation mechanism (autograd)
猜你喜欢
Postman核心功能解析-参数化和测试报告
Bitcoinwin (BCW)受邀参加Hanoi Traders Fair 2022
毫米波雷达人体感应器,智能感知静止存在,人体存在检测应用
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
Webuploader file upload drag upload progress monitoring type control upload result monitoring control
再忙不能忘安全
Xaas trap: all things serve (possible) is not what it really needs
不愧是大佬,字节大牛耗时八个月又一力作
安卓面试宝典,2022Android面试笔试总结
软件测试是干什么的?学习有啥要求?
随机推荐
常用运算符与运算符优先级
MMO项目学习一:预热
shell编程基础(第9篇:循环)
Necessary skills for interview in large factories, 2022android will not die, I will not fall
Thread pool parameters and reasonable settings
从零实现深度学习框架——LSTM从理论到实战【实战】
PHP利用ueditor实现上传图片添加水印
aggregate
【无标题】
id选择器和类选择器的区别
How about testing outsourcing companies?
Force buckle 1200 Minimum absolute difference
Wildcard selector
third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
成功入职百度月薪35K,2022Android开发面试解答
秋招字节面试官问你还有什么问题?其实你已经踩雷了
司空见惯 - 英雄扫雷鼠
Complete interview questions for interviewers and senior Android engineers in front-line Internet enterprises
Debezium series: parsing the default value character set
40000 word Wenshuo operator new & operator delete