当前位置:网站首页>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();
边栏推荐
- XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西
- Necessary skills for interview in large factories, 2022android will not die, I will not fall
- S7-200SMART利用V90 MODBUS通信控制库控制V90伺服的具体方法和步骤
- webuploader文件上传 拖拽上传 进度监听 类型控制 上传结果监听控件
- Postman core function analysis - parameterization and test report
- aggregate
- Inventory of the most complete low code / no code platforms in the whole network: Jiandao cloud, partner cloud, Mingdao cloud, Qingliu, xurong cloud, Jijian cloud, treelab, nailing · Yida, Tencent clo
- third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
- What is the function of okcc call center
- How MySQL queries and modifies JSON data
猜你喜欢
[AI framework basic technology] automatic derivation mechanism (autograd)
MMO項目學習一:預熱
Fundamentals of deep learning convolutional neural network (CNN)
PHP uses ueditor to upload pictures and add watermarks
深度学习 卷积神经网络(CNN)基础
Zhongang Mining: analysis of the current market supply situation of the global fluorite industry in 2022
如何安全快速地从 Centos迁移到openEuler
[OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
全网最全的低代码/无代码平台盘点:简道云、伙伴云、明道云、轻流、速融云、集简云、Treelab、钉钉·宜搭、腾讯云·微搭、智能云·爱速搭、百数云
深度學習 卷積神經網絡(CNN)基礎
随机推荐
安卓面试宝典,2022Android面试笔试总结
Reinforcement learning - learning notes 4 | actor critical
The city chain technology Digital Innovation Strategy Summit was successfully held
Common operators and operator priority
Microwave radar induction module technology, real-time intelligent detection of human existence, static micro motion and static perception
城链科技数字化创新战略峰会圆满召开
MMO项目学习一:预热
C#应用程序界面开发基础——窗体控制(6)——菜单栏、工具栏和状态栏控件
力扣 1200. 最小绝对差
【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台
强化学习-学习笔记4 | Actor-Critic
Webuploader file upload drag upload progress monitoring type control upload result monitoring control
Password reset of MariaDB root user and ordinary user
No matter how busy you are, you can't forget safety
redis集群模拟消息队列
Fundamentals of shell programming (Part 8: branch statements -case in)
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
Build your own website (16)
The problem of returning the longtext field in MySQL and its solution
C#应用程序界面开发基础——窗体控制(5)——分组类控件