3

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

4

2 回答 2

5

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

于 2013-03-06T23:46:19.737 回答
0

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

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

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

于 2021-02-10T18:03:53.913 回答