我正在尝试使用 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的正确方法吗?
1条答案
按热度按时间xkrw2x1b1#
不,不行
static
. 如果需要,可以将其设置为示例字段,但将其设置为类字段并不是最佳选择。e、 g.参见图纸上关于螺纹安全的注解Random
从中派生的类:示例
java.util.Random
是线程安全的。但是,同时使用相同的java.util.Random
跨线程的示例可能会遇到争用,从而导致性能低下。考虑使用ThreadLocalRandom
在多线程设计中。小心,尽管
ThreadLocalRandom
在加密方面不安全,因此对您来说不是一个好的选择。一般来说,您应该尽量避免使用static
类字段,尤其是当示例是有状态的时。如果您只需要在一个或几个不在紧循环中的方法中使用随机示例,那么将其作为本地示例是非常好的(只需使用
var rng = new SecureRandom()
换句话说,甚至只是new SecureRandom()
如果只有一个方法调用需要它)。