(4)Java併發編程高級篇-ThreadLocalRandom類

ThreadLocalRandom 類

Random 類的侷限性

每個Random實例中都存有一個原子性的種子變量,每當獲取隨機數時會根據當前種子變量的值計算出新的種子變量。在多線程的情況下,操作單個Random實例時,多個線程會同時競爭原子性種子變量的更新操作,且只能有一個成功。未成功的線程將會執行自旋操作繼續嘗試。在高併發的場景下,這種方式有損性能,所以ThreadLocalRandom應運而生。

ThreadLocalRandom類實現原理

ThreadLocalRandom 的 實現原理與ThreadLocal 非常相似,只不過ThreadLocalRandom 將計算隨機數的種子變量與當前線程綁定,來解決Random在多線程下競爭種子變量的更新操作,以此來提高隨機數生成的性能。以下爲ThreadLocalRandom的類圖:
在這裏插入圖片描述
可知 ThreadLocalRandom類繼承了Random並覆蓋了nextInt方法,關聯了Thread類,其中ThreadLocalRandom 中SEED變量 是 種子變量在Thread實例中的內存偏移量,底層都是通過Unsafe工具類來進行操作的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章