gpt4 book ai didi

java - 我应该更喜欢 ThreadLocalRandom 而不是 ThreadLocal

转载 作者:太空狗 更新时间:2023-10-29 22:57:45 26 4
gpt4 key购买 nike

我希望跨多个线程使用(种子)Random 对象,javadoc 将我指向 ThreadLocalRandom这看起来很棒,只是我无法设置种子,所以我无法确保不同线程或运行之间的一致性。是否有任何使用 ThreadLocalRandom 的实际原因,或者是否可以接受以下操作:

// Pass returned ThreadLocal object to all threads which need it
public static ThreadLocal<Random> threadRandom(final long seed) {
return new ThreadLocal<Random>(){
@Override
protected Random initialValue() {
return new Random(seed);
}
};
}

最佳答案

您可以简单地使用Random,只需确保每个Random 对象仅在单个线程中访问即可。

Random 是一个像 Vector 这样的古老类,不必要地高度同步。他们可能想炫耀 Java 的线程支持,因为这在当时是一件大事。此外,Java 主要旨在运行在大多数具有单处理器的消费 PC 上,因此同步不会像今天在多处理器上那样影响扩展。

现在一个明显的答案是提供线程不安全的 Random 版本,就像提供线程不安全的 ArrayList 作为 Vector 。那并没有发生,相反,我们得到了 ThreadLocalRandom。这有点奇怪,不确定这背后的动机是什么。在java8中,ThreadLocalRandom进一步优化,可以直接对Thread对象中的一些int字段进行操作。

关于java - 我应该更喜欢 ThreadLocalRandom 而不是 ThreadLocal<Random>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765399/

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