解决原始JDK Random对象低效原因
“Random”对象应该被重用,因为Random每次创建一个随机值时是低效的,而且根据JDK的不同,可能会产生非随机的数字。为了提高效率和随机性,创建一个单一的随机变量,然后存储和重用它。
Random()构造函数每次都尝试用不同的值设置种子。然而不能保证种子是随机的,甚至是均匀分布的。一些JDK将使用当前时间作为种子,这使得生成的数字根本不是随机的。
该规则发现在每次调用方法并将其分配给本地随机变量时创建一个新的随机变量的情况。
Random random=new Random();
不合规的代码示例
public void doSomethingCommon() {
Random rand = new Random();
使用原生JDK Random()每次调用int rValue = rand.nextInt()创建新实例低效。
建议方案
private Random rand = SecureRandom.getInstanceStrong();
public void doSomethingCommon() {
int rValue = this.rand.nextInt();
Exceptions
如果一个类在构造函数或静态主函数中使用了Random,那么这个规则就会忽略它。