gpt4 book ai didi

java - ThreadlocalRandom 和 just Random

转载 作者:行者123 更新时间:2023-12-01 18:04:38 25 4
gpt4 key购买 nike

我正在阅读 Richard Warburton 写的一本 Java 8 书籍,并且有一个关于并行流的随机数生成的问题。这是他提供的两次掷骰子模拟示例:

public Map<Integer, Double> parallelDiceRolls(){
double fraction = 1.0/N;
return IntStream.range(0, N)
.parallel()
.mapToObj(twoDiceThrows())
.collect(groupingby(side -> side,
summingDouble(n -> fracton));

我的问题是关于 twoDiceThrow 函数的。后来他给出了它的草图:

private int twoDiceThrow(ThreadLocalRandom random){
int firstThrow = random.nextInt(1, 7);
int secindThrow = random.nextInt(1, 7);
return firstThrow + secondThrow;
}

这里的问题是关于ThreadLocalRandom的。这不会影响统计吗?我的意思是 ThreadLocalRandom 仅限于 Thread,并且由于我们并行处理流,执行该工作的一个线程对另一个线程产生的结果一无所知。因此,统计数据可能与使用随机同步聚合的统计数据不同。

最佳答案

从随机生成的值序列应该是不相关的。

类似地,从 ThreadLocalRandom 生成的值序列应该与自身的值以及具有不同种子的任何其他 ThreadLocalRandom 的值不相关。

因此,切换到 ThreadLocalRandom 应该给出与使用 Random 具有相同统计数据的值。

优点是您无需进行任何同步。

关于java - ThreadlocalRandom 和 just Random,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606634/

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