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

直接的內存操作 + 直接的對象操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM