繁体   English   中英

scala.util.Random 线程安全吗?

[英]Is scala.util.Random thread safe?

我可以在多个线程中使用相同的scala.util.Random对象吗?

PRNG 的重要特征之一是给定相同种子时的可重复性。 想象一下,您的代码在启动时遇到异常或崩溃。 您希望重复该行为,以便调试问题。 如果您让自己控制种子,则可以在调试问题时使用相同的种子一遍又一遍地启动程序。 如果您从单个线程访问生成器,它将看到给定种子的相同序列。 如果您从多个线程访问它,您将无法控制每个线程访问生成器的顺序,因此它们将看到序列的不同子集。 因此,即使您可以依赖它,您也可能不想利用 Random 的线程安全性。

我完全同意@BenJackson,但我认为重要的是要提到scala.util.Random是线程安全的。 作为@tc。 在评论中提到, scala.util.Random只是java.util.Random的包装器。 正如在Random 类线程安全的许多答案中所阐述的那样吗? 它表明它是线程安全的,但在此注释中有一个指向 javadoc 的链接,该链接指出:

java.util.Random实例是线程安全的。 但是,跨线程并发使用同一个 java.util.Random 实例可能会遇到争用,从而导致性能不佳。 考虑在多线程设计中使用ThreadLocalRandom

因此,只要您使用 JDK 7 或更高版本,它就是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM