当前位置:网站首页>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();
边栏推荐
- 爬虫练习题(二)
- Using repositoryprovider to simplify the value passing of parent-child components
- ACM getting started Day1
- MMO项目学习一:预热
- Wildcard selector
- 【硬核干货】数据分析哪家强?选Pandas还是选SQL
- 四万字长文说operator new & operator delete
- How MySQL queries and modifies JSON data
- Thread pool parameters and reasonable settings
- 城链科技数字化创新战略峰会圆满召开
猜你喜欢
Xaas trap: all things serve (possible) is not what it really needs
深度學習 卷積神經網絡(CNN)基礎
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
[hard core dry goods] which company is better in data analysis? Choose pandas or SQL
95后阿里P7晒出工资单:狠补了这个,真香...
third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
成功入职百度月薪35K,2022Android开发面试解答
Do you know several assertion methods commonly used by JMeter?
城链科技数字化创新战略峰会圆满召开
What is the core value of testing?
随机推荐
不愧是大佬,字节大牛耗时八个月又一力作
什么是面上项目
大厂面试必备技能,2022Android不死我不倒
Explain in detail the functions and underlying implementation logic of the groups sets statement in SQL
[Collection - industry solutions] how to build a high-performance data acceleration and data editing platform
[AI framework basic technology] automatic derivation mechanism (autograd)
IBM大面积辞退40岁+的员工,掌握这十个搜索技巧让你的工作效率至上提高十倍
Android interview, Android audio and video development
Microwave radar induction module technology, real-time intelligent detection of human existence, static micro motion and static perception
JVMRandom不可设置种子|问题追溯|源码追溯
C application interface development foundation - form control (5) - grouping control
随机数生成的四种方法|Random|Math|ThreadLocalRandom|SecurityRandom
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
Reflection and imagination on the notation like tool
【obs】libobs-winrt :CreateDispatcherQueueController
Worthy of being a boss, byte Daniel spent eight months on another masterpiece
成功入职百度月薪35K,2022Android开发面试解答
Is the education of caiqiantang reliable and safe?
MMO項目學習一:預熱
MMO project learning 1: preheating