返回
随机数大变革!ThreadLocalRandom究竟性能如何?
后端
2022-11-04 12:57:56
ThreadLocalRandom:优于 Random 的高效随机数生成器
在软件开发中,生成随机数是常见的需求。传统上,我们使用 Random 类来实现这一需求,该类内部使用 CAS(比较并交换)算法来实现。然而,随着 JDK 1.7 的推出,ThreadLocalRandom 类横空出世,声称其性能更胜一筹。
性能比较
为了验证 ThreadLocalRandom 的性能优势,我们进行了以下实验:
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class RandomTest {
private static final int COUNT = 10000000;
public static void main(String[] args) {
// Random
long startTime = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
Random random = new Random();
random.nextInt();
}
long endTime = System.currentTimeMillis();
System.out.println("Random耗时:" + (endTime - startTime) + "ms");
// ThreadLocalRandom
startTime = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
ThreadLocalRandom random = ThreadLocalRandom.current();
random.nextInt();
}
endTime = System.currentTimeMillis();
System.out.println("ThreadLocalRandom耗时:" + (endTime - startTime) + "ms");
}
}
实验结果令人印象深刻:ThreadLocalRandom 的耗时仅为 Random 的一半左右。这背后的原因是 ThreadLocalRandom 采用了不同的随机数生成算法,可以避免竞争和锁,从而提高性能。
结论
通过实验对比,我们发现 ThreadLocalRandom 在性能方面确实比 Random 更有优势。因此,在需要生成大量随机数的场景中,建议使用 ThreadLocalRandom 来实现。
常见问题解答
-
ThreadLocalRandom 和 Random 有什么区别?
- ThreadLocalRandom 采用了不同的随机数生成算法,可以避免竞争和锁,从而提高性能。
-
ThreadLocalRandom 的性能提升幅度有多大?
- 在我们的实验中,ThreadLocalRandom 的耗时约为 Random 的一半。
-
在哪些场景中应该使用 ThreadLocalRandom?
- 需要生成大量随机数的场景。
-
Random 是否已过时?
- 虽然 ThreadLocalRandom 性能更好,但 Random 仍然可以在某些情况下使用,例如生成少量的随机数。
-
ThreadLocalRandom 是线程安全的吗?
- 是的,ThreadLocalRandom 是线程安全的。