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提供了一系列更底層的訪問操作方法,當然這是不安全的。所謂不安全,即不當應用容易導致非預期異常。
直接的內存操作 + 直接的對象操作