当前位置:网站首页>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();
边栏推荐
- Concept and syntax of function
- Fundamentals of shell programming (Chapter 9: loop)
- Fundamentals of shell programming (Part 8: branch statements -case in)
- 安卓面试宝典,2022Android面试笔试总结
- [OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
- Is it safe for Guosen Securities to open an account online?
- redis集群模拟消息队列
- Common - Hero Minesweeper
- 浅浅的谈一下ThreadLocalInsecureRandom
- Two pits exported using easyexcel template (map empty data columns are disordered and nested objects are not supported)
猜你喜欢
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer

Force buckle 1200 Minimum absolute difference

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

MMO project learning 1: preheating

How about testing outsourcing companies?

S7-200SMART利用V90 MODBUS通信控制库控制V90伺服的具体方法和步骤

太牛了,看这篇足矣了

Recommended collection, my Tencent Android interview experience sharing

【无标题】

微波雷达感应模块技术,实时智能检测人体存在,静止微小动静感知
随机推荐
Debezium series: parsing the default value character set
【无标题】
使用 RepositoryProvider简化父子组件的传值
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
Android interview, Android audio and video development
Where is the operation of new bonds? Is it safer and more reliable to open an account
Force buckle 729 My schedule I
期货如何网上开户?安不安全?
Django uses mysqlclient service to connect and write to the database
Common operators and operator priority
力扣 1200. 最小绝对差
95后阿里P7晒出工资单:狠补了这个,真香...
IBM大面积辞退40岁+的员工,掌握这十个搜索技巧让你的工作效率至上提高十倍
Redis cluster simulated message queue
Android面试,android音视频开发
JVMRandom不可设置种子|问题追溯|源码追溯
从零实现深度学习框架——LSTM从理论到实战【实战】
C application interface development foundation - form control (5) - grouping control
C#应用程序界面开发基础——窗体控制(5)——分组类控件
gst-launch的-v参数