java中的ThreadLocalRandom类

Java中提供了好几个类,可以让我们方便的实现随机数等功能,
这些类有java.util.Random, java.util.UUID **
以及JDK 7 新引入的
java.util.concurrent.ThreadLocalRandom**等。

  • Random虽然是线程安全的,但是在多线程下效率比较低,而且Random产生的随机数可能被预测,顾不适合做验证码类的随机数生产。

  • 在JDK7中,java.util.concurrent包含了一个相当便利的类,ThreadLocalRandom,当应用程序期望在多个线程或ForkJoinTasks中使用随机数时。

  • 对于并发访问,使用TheadLocalRandom代替Math.random()可以减少竞争,从而获得更好的性能。

  • 你只需调用ThreadLocalRandom.current(), 然后调用它的其中一个方法去获取一个随机数即可。

一个例子:


int r = ThreadLocalRandom.current().nextInt(4,77);

为什么使用ThreadLocalRandom在并发情况下,性能更好?

  • 因为Random用了很多CAS的类,ThreadLocalRandom根本没有用到。

展开阅读

  • Java随机数使用实例总结
  • Random,ThreadLocalRandom,SecureRandom

你可能感兴趣的:(java中的ThreadLocalRandom类)