Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每个线程的ThreadLocalRandom或new Random_Java_Multithreading_Random_Concurrency - Fatal编程技术网

Java 每个线程的ThreadLocalRandom或new Random

Java 每个线程的ThreadLocalRandom或new Random,java,multithreading,random,concurrency,Java,Multithreading,Random,Concurrency,在每个线程中创建新的java.util.Random对象或使用ThreadLocalRandom.current().nextInt(3);,有什么区别吗?从我所读到的内容来看,应该使用ThreadLocalRandom,而不是对所有线程使用相同的java.util.Random实例,但是如果为每个线程创建一个新实例呢 如果需要在多个线程中生成随机数,我应该何时使用java.util.Random,何时使用ThreadLocalRandom 如果您像在这里一样创建自己的线程,这没有什么区别 但是

在每个线程中创建新的java.util.Random对象或使用ThreadLocalRandom.current().nextInt(3);,有什么区别吗?从我所读到的内容来看,应该使用ThreadLocalRandom,而不是对所有线程使用相同的java.util.Random实例,但是如果为每个线程创建一个新实例呢

如果需要在多个线程中生成随机数,我应该何时使用java.util.Random,何时使用ThreadLocalRandom


如果您像在这里一样创建自己的线程,这没有什么区别

但是,如果您的代码是从您无法控制的不同线程调用的,
ThreadLocalRandom
是正确的使用方法

不过,有一个区别确实很重要:出于明显的原因,您不能为
ThreadLocalRandom
设置种子。因此,如果你想拥有可重复的序列,你需要创建你自己的
随机
实例。(但是,如果运行多个线程,将RNG种子设定为相同的值并不总是保证行为的可重复性。)


我个人会在不需要可重复序列的所有情况下使用
ThreadLocalRandom

好的,使用本地创建的
Random
实例需要JVM的优化器发现它是纯本地的(以避免同步),而
ThreadLocalRandom
首先是纯本地的…