Учитывая следующий код:
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, я не смог произвести повторный идентификатор. Тем не менее, после замены import java.util.Random
на import kotlin.random.Random
я могу создать повторный идентификатор почти сразу (после генерации 25000). Ожидается ли это что-то в отношении алгоритма XorWow
?