gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:47:38 27 4
gpt4 key购买 nike

我正在使用调用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com