1、概述
ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它弥补了Random类在多线程下的缺陷。
2、Random类及其局限性
// java.util.Random的使用方法
public class RandomTest {
public static void main(String[] args) {
// 创建一个默认种子的随机数生成器
Random random = new Random();
// 输出10个在0-5(包含0,不包含5)之间的随机数
for (int i=0;i<10;++i) {
System.out.println(random.nextInt(5));
}
}
}
随机数的生成需要一个默认的种子,这个种子其实是一个long类型的数字,你可以在创建Random对象时通过构造函数指定,如果不指定则在默认构造函数内部生成一个默认的值。
nextInt(int bound)源码如下:
public int nextInt(int bound) {
// 参数检查
if (bound <= 0)
throw new IllegalArgumentException(BadBound);
// 根据老种子生成新种子
int r = next(31);
// 根据新种子计算随机数
int m = bound - 1;
if ((bound & m) == 0) // i.e.