Java 通过这种方式我会得到更好的随机性吗?

Java 通过这种方式我会得到更好的随机性吗?,java,random,numbers,Java,Random,Numbers,如果我使用这样的解决方案,我会得到更好的随机数质量吗 import java.util.*; public class Main { private static final Random PRNGs[] = new Random[137]; private static int nextInt() { return PRNGs[ (int)(System.currentTimeMillis() % PRNGs.length) ].nextInt();

如果我使用这样的解决方案,我会得到更好的随机数质量吗

import java.util.*;

public class Main {
    private static final Random PRNGs[] = new Random[137];

    private static int nextInt() {
        return PRNGs[ (int)(System.currentTimeMillis() % PRNGs.length) ].nextInt();
    }

    static {
        for(int i=0; i<PRNGs.length; i++) {
            PRNGs[i] = new Random();
        }
    }

    public static void main(String[] args) {
        System.out.println( nextInt() );
    }
}
import java.util.*;
公共班机{
私有静态最终随机PRNG[]=新随机[137];
私有静态int-nextInt(){
返回PRNGs[(int)(System.currentTimeMillis()%PRNGs.length)].nextInt();
}
静止的{

对于(int i=0;iNo),您没有得到更好的随机性。如果您想使用随机值(例如用于加密),请查看
SecureRandom
。随机是完全可预测的,而SecureRandom则不是(这就是区别)

“真实”随机数需要硬件支持,据我所知,在Java中并不容易获得


至于“连续12次红色”:几率很小(假设红色或黑色的几率为50/50):1/0.5^12(4096分之一)的尝试会给你连续12次红色。

“如果使用随机对象的一个实例,那么12次相同颜色的事件是不可能实现的。”你是怎么想到这个假设的?你的意思是什么“更好”?当谈论随机数生成器时,您担心的是分布和偏差(参见示例)。换句话说,您应该澄清您的需求-不确定您到底想要什么。
PRNGs[i]=new random()
是邪恶的:所有生成器都将由系统计时器初始化,这就是为什么会有相同的种子。例如,GhostCat在死硬测试中的效果更好。Dmitry Bychenko Oracle是否使用毫秒进行随机对象初始化?不,你不会得到更好的随机性。如果你这样做了,它将解决很多问题一个简单的方法(如果你能把一堆软件连在一起,谁就需要一个HWRNG)。你最初的假设“一个
随机数
不能得到12倍相同的颜色”也完全是一派胡言。