gpt4 book ai didi

java - Kotlin Random和Java Random之间的分布差异

转载 作者:行者123 更新时间:2023-12-02 13:33:40 25 4
gpt4 key购买 nike

考虑以下代码:

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.newFixedThreadPoolContext
import kotlinx.coroutines.runBlocking
import java.util.concurrent.ConcurrentSkipListSet
import java.util.Random

val ids = ConcurrentSkipListSet<String>()

fun append(id: String) {
if (ids.contains(id)) throw RuntimeException("Repeated: $id")
ids.add(id)
}

fun main() = runBlocking<Unit> {
val rnd = Random(System.nanoTime())
delay(1000)

val scope = CoroutineScope(newFixedThreadPoolContext(32, "MyThread"))
repeat(10_000_000) {
scope.launch {
val high = rnd.nextLong()
val low = rnd.nextLong()

append("$high:$low")
}
}

scope.coroutineContext[Job]?.children?.forEach { it.join() }
}

在MacOS 10.14.6,Kotlin 1.3和JVM 1.8上运行,我无法产生任何重复的ID。但是,将 import java.util.Random替换为 import kotlin.random.Random之后,我几乎可以立即生成重复的ID(在25000代之后)。关于 XorWow算法,这是预期的吗?

最佳答案

那很微妙。从kotlin 1.3版本开始,Random(seed)工厂函数返回的XorWow实现与Java实现不同。此实现根本不是线程安全的。因此,请勿使用跨多个线程共享的XorWowRandom的单个实例。

关于java - Kotlin Random和Java Random之间的分布差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083968/

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