关于 ThreadLocalRandom 随机数生成器
ThreadLocalRandom 线程安全随机数获取。
示例随机整数:java.util.concurrent.ThreadLocalRandom.current().nextInt();
线程Thread类中的三个变量:threadLocalRandomSeed、threadLocalRandomProbe、threadLocalRandomSecondarySeed
图1
这三个字段是由ThreadLocalRandom来管理的,用以创建并发应用中的高性能伪随机数生成器。
ThreadLocalRandom current() 获取当前实例:涉及sun.misc.Unsafe类的使用
图2
ThreadLocalRandom 静态域:SEED、PROBE初始化
图3
SEED、PROBE通过Unsafe实例从当前线程获取。也就是图1中的三个字段。
当当前线程ThreadLocalRandom为0时,也就是未初始化过,则通过Unsafe进行初始化。
图4
probeGenerator、seeder皆为原子型变量
图5
获取新值后,通过Unsafe放入当前线程。
附注:关于 sun.misc.Unsafe
Unsafe提供了一系列更底层的访问操作方法,当然这是不安全的。所谓不安全,即不当应用容易导致非预期异常。
直接的内存操作 + 直接的对象操作