1 结构分析
因为Random类在高并发情况下将造成多个线程竞争同一个原子类种子,所以为了提高高并发性能诞生了该类,即让每一个Thread都持有一个种子计算自己的随机数,ThreadLocalRandom类的类图如下:
Thread类中和ThreadLocalRandom相关的字段
2 主要方法分析
1 current()方法
该方法会获得ThreadLocal实例并且将会初始化线程中的Seed和Probe属性(这两个属性初始值都是0)
public static ThreadLocalRandom current() {
//利用unsafe来判断当前线程的Probe是否等于0,
//等于0则表示该线程是第一次调佣该方法,然后会接着调用localInit()方法进行初始化
if (UNSAFE.getInt(Thread.currentThread(), PROBE) == 0)
localInit();
//返回ThreadLocalRandom实例,该方法是静态方法,所有线程调用该方法返回的是同一个ThreadLocalRandom实例