- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个网络应用程序,我需要为每个请求生成一个随机数。该请求将命中一组存储桶中的特定存储桶。为给定桶生成的随机数应该具有均匀分布。我计划使用一个具有 SplittableRandom 实例的 map 来对抗像这样的存储桶 id
buketId -> SplittableRandom
为了处理网络请求,我首先检查请求中指定的bucketId。然后我选择相应的 SplittableRandom 实例并对其调用 split() 。在重负载下 split() 方法将由多个线程在同一实例上调用。这种方法线程安全吗?
最佳答案
来自 javadoc
Instances of SplittableRandom are not thread-safe. They are designed to be split, not shared, across threads. For example, a
java.util.concurrent.ForkJoinTask
fork/join-style computation using random numbers might include a construction of the formnew Subtask(aSplittableRandom.split()).fork()
.
split()
方法基于 this
返回一个新的 SplittableRandom
实例。
public SplittableRandom split() {
return new SplittableRandom(nextLong(), mixGamma(nextSeed()));
}
mixGamma()
方法是线程安全的,但会调用 nextSeed()
(均在 split()
和 中) nextLong()
)则不然,因为它们修改非 volatile 长种子
而没有任何同步机制。
关于java - SplittableRandom.split() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41823667/
我是一名优秀的程序员,十分优秀!