我正在尝试使用SecureRandom
在我的java项目中生成随机数。但我对如何保存我的对象有点困惑SecureRandom
。它应该是一个static
班级成员。我不打算从外面打电话。以下是我当前的实现:
Class MyClass {
private static final SecureRandom secureRandom = new SecureRandom();
private long calculate(int noOfRetry){
final long value = someValueCalculationWith-noOfRetry;
final float randomNo = secureRandom().nextFloat() + 1;
return (long) (value*randomNo);
}
}
这是在 java 中使用 SecureRandom 的正确方法吗?
不,别成功static
。如果您愿意,可以将其设为实例字段,但将其设为类字段并不是最佳选择。例如。请参阅关于线程安全的注释Random
它派生自的类:
实例java.util.Random
是线程安全的。然而,同时使用相同的java.util.Random
跨线程的实例可能会遇到争用并导致性能不佳。考虑改为使用ThreadLocalRandom
在多线程设计中。
但请注意,ThreadLocalRandom
is not加密安全,因此对您来说不是一个好的选择。一般来说,您应该尝试并避免使用static
类字段,尤其当实例是stateful.
如果您只需要一个或几个不处于紧密循环中的方法中的随机实例,那么将其设为本地实例就完全没问题(只需使用var rng = new SecureRandom()
换句话说,或者甚至只是new SecureRandom()
如果你有a single需要它的方法调用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)