当前位置:网站首页>JVMRandom不可设置种子|问题追溯|源码追溯
JVMRandom不可设置种子|问题追溯|源码追溯
2022-07-05 19:46:00 【步尔斯特】
上一篇文章,我们介绍了几种随机数的生成策略。
那么接下来,我们来分析一下JVMRandom存在的问题。
当我们如下正常构建一个随机数的时候,是没有任何问题的。
JVMRandom jvmRandom = new JVMRandom();
int i = jvmRandom.nextInt(10);
System.out.println(i);
既然JVMRandom底层调用的是Random的构造函数,那么是否也是可以设置seed值呢?
我们来验证一下
JVMRandom jvmRandom = new JVMRandom();
jvmRandom.setSeed(2);
int i = jvmRandom.nextInt(10);
System.out.println(i);
唰~报错了
Exception in thread "main" java.lang.UnsupportedOperationException
at org.apache.commons.lang.math.JVMRandom.setSeed(JVMRandom.java:71)
at com.ossa.producer.controller.ProducerController.main(ProducerController.java:61)
让我们看一看源码,一探究竟。
JVMRandom继承了Random,并重写了setSeed方法。
并且已经不支持设置种子值。
源码如下,当constructed值为false时,就会抛出异常。
/** * Unsupported in 2.0. * * @param seed ignored * @throws UnsupportedOperationException */
public synchronized void setSeed(long seed) {
if (this.constructed) {
throw new UnsupportedOperationException();
}
}
追溯一下constructed值,默认是false
/** * Ensures that only the parent constructor can call reseed. */
private boolean constructed = false;
但是,我们观察其结构可以发现,它只有一个无参构造函数。
看看是什么样子的
/** * Constructs a new instance. */
public JVMRandom() {
this.constructed = true;
}
哦,那么没办法了,也就是说,如果我们想使用JVMRandom来构建随机数,就一定会通过无参构造函数创建对象,那么constructed就一定会是true,所以,如果你调用了setSeed方法,那么就一定会抛出上述异常。
边栏推荐
- 建立自己的网站(16)
- JMeter 常用的几种断言方法,你会了吗?
- -v parameter of GST launch
- Is it safe for China Galaxy Securities to open an account? Securities account opening
- [untitled]
- Xaas trap: all things serve (possible) is not what it really needs
- MMO項目學習一:預熱
- C#应用程序界面开发基础——窗体控制(5)——分组类控件
- [OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
- Webuploader file upload drag upload progress monitoring type control upload result monitoring control
猜你喜欢
How to realize the Online timer and offline timer in the game
What do software test engineers do? How about the prospect of treatment?
Apprentissage du projet MMO I: préchauffage
Fuzor 2020軟件安裝包下載及安裝教程
How to safely and quickly migrate from CentOS to openeuler
如何安全快速地从 Centos迁移到openEuler
建议收藏,我的腾讯Android面试经历分享
Fuzor 2020 software installation package download and installation tutorial
测试的核心价值到底是什么?
Force buckle 729 My schedule I
随机推荐
Where is the operation of new bonds? Is it safer and more reliable to open an account
[OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
浮动元素与父级、兄弟盒子的关系
Microwave radar induction module technology, real-time intelligent detection of human existence, static micro motion and static perception
通配符选择器
Necessary skills for interview in large factories, 2022android will not die, I will not fall
IBM大面积辞退40岁+的员工,掌握这十个搜索技巧让你的工作效率至上提高十倍
安信证券在网上开户安全吗?
ACM getting started Day1
IBM has laid off 40 + year-old employees in a large area. Mastering these ten search skills will improve your work efficiency ten times
再忙不能忘安全
MMO project learning 1: preheating
[FAQ] summary of common causes and solutions of Huawei account service error 907135701
Webuploader file upload drag upload progress monitoring type control upload result monitoring control
【obs】libobs-winrt :CreateDispatcherQueueController
The problem of returning the longtext field in MySQL and its solution
Complete interview questions for interviewers and senior Android engineers in front-line Internet enterprises
Android面试,android音视频开发
gst-launch的-v参数
Which securities company is better and which platform is safer for mobile account opening