Java 线程 Random.nextLong() 返回相同的数字

标签 java multithreading random thread-safety

我正在使用调用 new Random().nextLong() 来生成随机数的 OAuth 库,但是它在异步调用时生成相同的随机数。我已将其缩小到线程化 Random.nextLong() 以经常返回相同的确切数字。

有谁知道这是否是 Java 的已知限制?如果是这样,有人知道线程安全操作吗?

编辑:我正在使用 Java 1.6

编辑:这是我制作的一个小程序,用于测试我的大型应用程序中发生的情况。我跑了好几次,比它应该跑的更频繁,当时间相同时,它会产生相同的随机数。请原谅我的快速编程。

public class ThreadedRandom {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    new ThreadedRandom().run();
}

private RandomNumberGenerator _generator;

public ThreadedRandom()
{
    _generator = new RandomNumberGenerator();
}

public void run()
{
    Runnable r = new Runnable() {
        @Override public void run() {
            System.out.println(System.currentTimeMillis()+"\t"+_generator.gen());
        }
    };

    Thread t1, t2;

    t1 = new Thread(r);
    t2 = new Thread(r);

    t1.start();
    t2.start();
}

private class RandomNumberGenerator {

    Random random;
    public RandomNumberGenerator()
    {
        random = new Random();
    }

    public Long gen() {
        return new Random().nextLong();
    }
}

最佳答案

您可能不想每次都创建一个新的 Random 实例。而是拥有一个全局性的。

关于Java 线程 Random.nextLong() 返回相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797849/

相关文章:

Java:匿名类的初始化和构造函数

ios - MonoTouch 在后台加载图像

java - 测试多线程计划任务

java - 将充满 double 的文本文件读取到二维数组中

java - 使用 Apache POI 从 PowerPoint 幻灯片中删除图表

java - 基于循环内加减一的计算器思维练习

linux - 使用 Bash 脚本进行多线程编程

java - 随机数生成器正在生成巨大的负数

php - 随机数、列和行。 PHP

java - 随机对象和数组