我正在尝试Java 7的
ThreadLocalRandom,并发现它在多个线程中生成完全相同的随机数。
这是我的代码,在其中创建5个线程,每个线程打印出5个随机数:
//5 threads
for(int i = 0; i < 5 ; i++) {
final Thread thread = new Thread() {
@Override
public void run() {
System.out.print(Thread.currentThread().getName()+":");
//each thread prints 5 random numbers
for(int j = 0 ; j < 5; j++) {
final int random = ThreadLocalRandom.current().nextInt(1,100);
System.out.print(random + ",");
}
System.out.println();
}
};
thread.start();
thread.join();
}
输出:
Thread-0:1,93,45,75,29,
Thread-1:1,93,45,75,29,
Thread-2:1,93,45,75,29,
Thread-3:1,93,45,75,29,
Thread-4:1,93,45,75,29,
为什么对于每个线程和程序的每次执行都获得相同的随机数?
似乎有一个关于此问题的公开错误。看这里和这里
问题内容: java.util.Random的实例是线程安全的。但是,跨线程并发使用同一java.util.Random实例可能会引起争用并因此导致性能下降。考虑在多线程设计中改用ThreadLocalRandom。 什么样的争执因而表现不佳?有人可以在这里给我解释吗?我不知道在Random和ThreadLocalRandom中使用什么算法使它们与众不同。 问题答案: 这可能会有所帮助: http
主要内容:1 伪随机数,2 Random,2.1 随机数的生成和局限性,3 ThreadLocalRandom,3.1 概述,3.2 current方法,3.3 nextInt方法,3.4 总结详细介绍了ThreadLocalRandom伪随机数生成器的原理,以及对Random的优化! 1 伪随机数 简单的了解一下伪随机数的概念。 通过固定算法产生的随机数都是伪随机数,Java语言的随机数生成器或者说整个计算机中的随机数函数,生成的都是伪随机数。只有通过真实的随机事件产生的随机数才是真随机数。比
在我的计算机上卸载并重新安装C编译器 在我的计算机上安装和使用其他C编译器 使用相同的编译器在他人的计算机上运行该程序? 用不同的编译器(可能还有不同的操作系统)在其他人的计算机上运行程序? 还是仅仅是所有C编译器使用相同的RNG算法,所以伪随机序列(从一开始)对每个人都是一样的问题?
问题内容: 我在这里有一些东西,但是我无法按照自己的喜好工作: 上面的位生成数字,但是它们可以相同。下面的代码可以解决此问题,但不能,但是似乎可以减少这种可能性: 很明显,它只是打印它们。 问题答案: 您可以用来从可迭代对象中获取任意数量的唯一“随机”项-无需使用嵌套循环:
random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando
问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实